Angular父子控制器通信

时间:2014-12-08 01:12:38

标签: angularjs

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

我意识到使用ng-if可以帮助我解决这个问题。但是这两个范围无法沟通。我的问题是:

  1. 如何双向绑定2个范围内的变量?这是正确的方法吗? ..
  2. 有什么方法我不需要使用这个ng-if?我有2-3个promise变量在那里等待,我不希望在元素中有多个ng-if语句。这可能吗?
  3. http://jsbin.com/rahidukuvi/1/edit

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

最简单的方法是在子控制器中使用$ scope。$ watch来等待父控制器中ajax回调的任何变量值更改。在$ scope。$ watch回调中,您可以根据需要更改变量值。

答案 2 :(得分:1)

你会使用广播让儿童管理员知道价值是否有所改变。然后,您将在子控制器中监听它并做必要的事情。请参阅下面的示例代码

    .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';
        });


    });