AngularJS-服务更改控制器数据

我发现,当我在控制器内调用服务方法并将一个对象作为参数传递给它时,对该对象(在服务方法内部)所做的任何更改也会从我的控制器对原始对象进行。

我一直以为控制器数据应该保持不变,直到在promise win / error事件中更改了它,并且仅在需要时才更改。

JS示例:

// Code goes here
var app = angular.module('App', []);

app.controller('AppCtrl', function($scope, simpleService){
  $scope.data = { d: 1, c: 10};

  $scope.clickMe = function(){
    simpleService.clickMe($scope.data).then(function(res){
      alert($scope.data.d);
    })
    .catch(function(err){
      alert($scope.data.d);
    });

  }

});

app.factory('simpleService', function($q){
  var simpleServiceMethods = {};

  simpleServiceMethods.clickMe = function(data){
    var deffered = $q.defer();
    //data = JSON.parse(JSON.stringify(data)); - solution: clone data without references

    data.d = 1111;

    deffered.reject();

    return deffered.promise;
  }

  return simpleServiceMethods;
});

Plunker演示:http ://plnkr.co/edit/nHz2T7D2mJ0zXWjZZKP3?p=preview

jh3y

我相信这是angular数据绑定的本质。如果要传递$scope变量的详细信息,则可以copy在服务端创建一个副本,从而利用angular的克隆功能或将服务更新为稍有不同。普通的CRUD样式的应用程序通常会传递id一个实体,接收一个新实体或发布可能在大多数情况下已经存在于客户端的更改。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章