2014-12-08 61 views
1

我想从子控制器访问/修改父控制器中的某些变量。这个变量是一个promise(一些$ http请求),所以当我在子控制器中渲染元素时,这个变量仍然不存在。角父母和子控制器通信

我意识到使用ng-if可以帮我解决这个问题。但是2范围不能通信。我的问题是:

  1. 我怎么双向绑定变量2范围是什么?这是做到这一点的正确方法吗? ..
  2. 有没有办法,我不需要使用这个ng-if?我有2-3个承诺等待的变量,我不想在元素中使用多个ng-if语句。这可能吗?

http://jsbin.com/rahidukuvi/1/edit

回答

1

最简单的方法是使用$范围。$表在孩子控制器等待父控制器基于Ajax回调的任何变量值的变化。在$ scope中。$ watch回调在子控制器中,您可以根据需要更改变量值。

1

你会使用brodcast让子控制器知道值已更改。然后,您会在儿童控制器中听取并做必要的事情。请参阅下面的示例代码

.controller('MyController', 
    function($scope, $interpolate, $timeout) { 

     //$scope.sssss = {}; 

     $scope.$watch('sssss.a', function() { 
      $scope.$broadcast('valueChanged', $scope.sssss) 
     }); 

     $timeout(function() { 
      $scope.sssss = { 
       a: '12345' 
      }; 
     }, 2000); 



    }) 
.controller('MyChildController', 
    function($scope, $interpolate, $timeout) { 
     $scope.$on('valueChanged', function(event, value) { 
      $scope.ttttt = value.a + '123'; 
     }); 


    }); 
+0

是使用$ watch的唯一方法吗?我为什么要这样做的原因是我将多个承诺传递给子控制器,如果我有多个$ watch,这将会非常复杂.... – 2014-12-09 06:25:44

+0

但是,如果您只是在父控制器上创建监视器,然后广播改变所有关心它的儿童管制员?除非我误解了 – user1325394 2014-12-10 05:35:46

2

最佳做法是创建一个可以在控制器之间共享的服务(使用单例模式)。