Angularjs:数据绑定不工作

Angularjs: Databinding not working

在控制器中绑定一个 service/factory 变量非常有效,除非工厂变量是通过 $http 启动的。谁能解释一下为什么?

注意:因为 controller.someVariable = factory.someVariable 不起作用。目前我直接引用工厂变量进行操作 factory.someVariable

控制器:

app.controller('SecondCtrl',function($scope,testFactory){
  $scope.obj = testFactory.obj;
  $scope.factory = testFactory;
  $scope.jsonData = testFactory.jsonData;   //Not Binding

  //Accessing $scope.factory.jsonData works while $scope.jsonData doesn't
});

工厂:

app.factory('testFactory', ['$rootScope','$http',function ($rootScope,$http) {

    var factory = {};

    factory.obj = { 'name':'Jhon Doe'};

    factory.jsonData;

    factory.fromjson = function() {
      $http.get("data.json")
        .success(function(data){
           factory.jsonData  = data.result;
        })

    }

    factory.fromjson();

    return factory;

}]);

笨蛋: http://plnkr.co/edit/wdmR5sGfED0jEyOtcsFz?p=preview

正如我在评论中提到的,发生这种情况的原因是因为 $scope.jsonData = testFactory.jsonData; 是一个 value 赋值,不幸的是该值无法从当这个分配发生时服务器还没有。其他作业有效,因为它们是 reference 作业。

解决此问题的一种快速但肮脏的方法是声明 factory.jsonData = {}; 而不是 factory.jsonData;。这将更改对引用分配(对象到对象)的调用,并允许对一个对象的更改传播到另一个。