Angularjs 通过resolve初始化的对象不是";看了吗;?

Angularjs 通过resolve初始化的对象不是";看了吗;?,angularjs,Angularjs,我需要帮助理解“观察”对象的变化并在视图中更新它的概念 在我的特殊情况下,对象通过视图的解析进行初始化,然后使用控制器分配给作用域的参数 我的期望是,如果我再次更新原始对象,那么它应该会更改视图中打印出来的值 var myApp = angular.module('myApp', ['ngRoute']); myApp.config(['$routeProvider', function($routeProvider) { $routeProvider. when('/

我需要帮助理解“观察”对象的变化并在视图中更新它的概念

在我的特殊情况下,对象通过视图的解析进行初始化,然后使用控制器分配给作用域的参数

我的期望是,如果我再次更新原始对象,那么它应该会更改视图中打印出来的值

var myApp = angular.module('myApp', ['ngRoute']);

myApp.config(['$routeProvider',
  function($routeProvider) {
    $routeProvider.
      when('/', {
        template: 'hello {{ user.name }}',
        controller: 'userController',
        resolve: {
          user: function () {
            return {name: 'john'}
          }
        }
      }).
      otherwise({
        redirectTo: '/'
      });
  }]);

myApp.controller('userController', function($scope, user) {

    $scope.user = user;

    // I thought the object is supposed to be watched by reference but it is not
    user = {name: 'doe'}

});
普朗克:

请告诉我我做错了什么以及如何修复它

编辑以获取更多说明:

跳过这一切背后的原因是我的错。我的决心实际上是这样的:

resolve: {
              user: function () {
                return userService.get();
              }
            }
如您所见,我返回了一个要解析的对象(这是userService中定义的属性)。现在,我希望只要调用userService.update();在我的控制器中,仍然指向同一对象的$scope.user将自动更新。我想不是

userService.update(); 

问题很简单$scope.user指向的对象与调用后用户指向的对象不同
user={name:'doe'}

解决方案是其中之一

$scope.user={name:'doe';}

更新:如果服务更新了数据,并且控制器想要得到通知,那么采取的方法是在$rootSscope上引发事件。 在服务中你能做什么

$rootScope.$emit('event.userUpdate',{user:user});
在控制器中,您可以使用

$rootScope.$on('event.userUpdate',function(evt, args) {
   //args should have he update user data, to rebind.
});

如果我正确理解了您想要实现的目标,那么这应该是可行的:

myApp.controller('userController', function($scope, user) {

    $scope.user = user;

    $scope.user = {name: 'doe'}

});
注意行:
$scope.user={name:'doe'}
而不是
user={name:'doe'}

这是你的修改版


在您编辑问题时,我还更新了我的答案,向您展示了如何实现$watch功能。在这种情况下,我们关注变量willChange的变化,并相应地改变用户。这里是。

事实上,问题是这个用户应该通过服务更新,所以我更愿意以某种方式简单地更新用户,范围将反映出,有什么解决方案吗?只要服务更新同一个用户对象,一切都会很好。感谢Chandermani,我更新了我的问题以获取更多信息,如果我不够清楚,请告诉我。angularjs服务是一个工厂函数,因此只触发一次(当控制器实例化时)。您可以实现$watch函数来监视何时发生更改,然后再次调用服务函数。Chandermani是完全正确的。他的方法可能正是你想要的。当用户发生更改时,您将触发$emit或$broadcast事件,并且在所有感兴趣的控制器中使用$on查看更改并做出相应响应。谢谢zszep,我用更多信息更新了我的问题我更新了我的答案,以向您展示如何实现$watch功能。
myApp.controller('userController', function($scope, user) {

    $scope.user = user;

    $scope.user = {name: 'doe'}

});