AngularJS - 模型更改不更新视图

时间:2014-01-23 08:14:19

标签: javascript angularjs dom

AngularJS Classic:我在ng-click上更改了我的模型,视图没有更新。我认为简单$scope.$apply()会更新,但我没有让它工作。我想我没有把$apply()放在正确的地方或类似的地方。

示例: Plunker

按下按钮更改了对象的名称。

1 个答案:

答案 0 :(得分:3)

点击后再次更新explorerObject,因为它仍然指向您之前的对象:

 $scope.click = function () {
    ExplorerService.setExplorerObject({
      selected : {
        name: 'Defined Now !',
        id: 'id',
        timestamp: 'timestamp'
      },
      templateURL: 'views/beispiel.html'
    });
     $scope.explorerObject = ExplorerService.getExplorerObject(); // <--- here
  }

工作:http://plnkr.co/edit/UWE7o3mtAzY3xzYRWfkf?p=preview

提问后'编辑:

您可以在第二个控制器中使用$watch

app.controller('SecondCtrl', function($scope, ExplorerService) {

  $scope.$watch(function(){
      return ExplorerService.getExplorerObject();
  },function(n,o){
      $scope.explorerObject = ExplorerService.getExplorerObject(); 
  },true)

});

工作:http://plnkr.co/edit/8mZO5kZmTrqwHKnxtBSd?p=preview

或使用$broadcast方法,例如:

app.controller('SecondCtrl', function($scope, ExplorerService) {

  $scope.explorerObject = ExplorerService.getExplorerObject(); 

  $scope.$on("EXPLORER_OBJECT_CHANGED" ,function(event,obj){ 
      $scope.explorerObject = obj;
  });    

});

在您的服务中添加:$rootScope.$broadcast("EXPLORER_OBJECT_CHANGED", explorerObject);

示例:http://plnkr.co/edit/9WKypJTb0wViQZ01m9TN?p=preview