Angularjs 角度主子控制器通信

Angularjs 角度主子控制器通信,angularjs,Angularjs,我试图从子控制器访问/修改父控制器中的某些变量。这个变量是一个promise some$http请求,所以在我呈现子控制器中的元素时,这个变量仍然不存在 我意识到使用ng if可以帮助我解决这个问题。但这两个作用域无法通信。我的问题是: 如何双向绑定2范围中的变量?这是正确的方法吗。。 有没有什么方法我不需要使用这个ng if?我有2-3个promise变量等待在那里,我不希望在一个元素中有多个ng if语句。这可能吗? 最简单的方法是在子控制器中使用$scope.$watch,在父控制器中的a

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

我意识到使用ng if可以帮助我解决这个问题。但这两个作用域无法通信。我的问题是:

如何双向绑定2范围中的变量?这是正确的方法吗。。 有没有什么方法我不需要使用这个ng if?我有2-3个promise变量等待在那里,我不希望在一个元素中有多个ng if语句。这可能吗?
最简单的方法是在子控制器中使用$scope.$watch,在父控制器中的ajax回调时等待任何变量值的更改。在$scope内。$watch callback在子控制器中,您可以根据需要更改变量值。

您可以使用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';
        });


    });

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

使用$watch是唯一的方法吗?我这样做的原因是我正在将多个承诺传递给子控制器,如果我有多个$watch,这将非常复杂……但您是否会仅在父控制器上创建watch,然后向所有关心它的子控制器广播更改?除非我误解了