【问题标题】:How to DRYly watch a $resource for updates?如何 DRYly 观看 $resource 的更新?
【发布时间】:2015-07-09 05:45:50
【问题描述】:

我有一个带有控制器的 Angular 应用程序。控制器加载一个由 $resource 服务生成的资源,并为 html 模板上的按钮公开一个函数以更新潜在客户。代码看起来像

app
.service('User', function($resource){
  return $resource(...);
})
.controller('FooController', function($scope, User){
  var doSomething = function(){...};

  $scope.user = User.get(1);
  $scope.user.$promise.then(function(){
    doSomething();
  });

  $scope.save = function(){
    $scope.user.$save()
    .then(function(){
      doSomething();
    });
  };
})

我的问题是:有没有一种 DRY 的方式来声明一旦用户获取其更新数据时应该调用 doSomething,无论是来自 get 还是 save

【问题讨论】:

    标签: angularjs angular-resource ngresource


    【解决方案1】:

    是的,您可以在 $scope.user 上使用 $watch 函数并调用您的 doSomething 函数。

    类似的东西

    $scope.$watch('$scope.user',function(newVal,oldVal){
     //your code here
    });
    

    【讨论】:

    • $scope.user.$save() 不会更改$scope.user 指向的引用。
    • $watching $scope.user 没有帮助,因为在调用 $scope.user.$save 之后 $scope.user 仍然是同一个对象。 $scope.user 的成员发生了变化,但 $scope.user 本身仍然是同一个对象。
    • $scope.$watch('$scope.user',function(){},true) 将深入观察对象。
    • 我希望在并且仅在从远程服务器加载对象数据时收到通知。深入观察对象不知道成员是否因为它是从服务器加载而改变的,或者是因为应用程序改变了它,例如作为用户输入的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    相关资源
    最近更新 更多