在AngularJS中,如何将变量值的变化从子控制器分配给父控制器?

在AngularJS中,如何将变量值的变化从子控制器分配给父控制器?,angularjs,Angularjs,在这段代码中,我们有一个父控制器和一个子控制器。在HTML中,请注意父控制器包含子控制器。在父控制器中,我使用$controller服务,它获取子控制器的作用域。子控制器的$scope.child将分配给$scope.Parent。单击按钮时,会将子控制器中的$scope.Child值更改为“new Child” 我也在尝试在父控制器中实现相同的更改。我希望$scope.Parent通过在$scope.child上放置$watch()来获得作为“new child”的值。但是子控制器的$scop

在这段代码中,我们有一个父控制器和一个子控制器。在HTML中,请注意父控制器包含子控制器。在父控制器中,我使用$controller服务,它获取子控制器的作用域。子控制器的$scope.child将分配给$scope.Parent。单击按钮时,会将子控制器中的$scope.Child值更改为“new Child”

我也在尝试在父控制器中实现相同的更改。我希望$scope.Parent通过在$scope.child上放置$watch()来获得作为“new child”的值。但是子控制器的$scope.child的值的更改没有反映在$scope.Parent中

因此,我的问题是如何将子控制器中$scope.Child值的更改分配给父控制器

<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<script type="text/javascript">
    var app = angular.module('myApp',[]);

    app.controller('parent', function($scope,$controller){  
        var childScope = $controller('child',{$scope: $scope});
        $scope.Parent = $scope.Child; 
        $scope.$watch('Child',function(){
            $scope.Parent = $scope.Child;
        },true);
    });

    app.controller('child',function($scope){
        $scope.Child = "child";
        $scope.changeValue = function() {
            $scope.Child = "new child";
        }
    });
</script>
<body ng-app="myApp">
 <div ng-controller="parent">
    <p>this is parent: {{Parent}}</p>
    <div ng-controller="child">
        <p>this is {{Child}}</p>
        <button ng-click="changeValue()">Click!</button>
    </div>
 </div>
</body>
</html>

var-app=angular.module('myApp',[]);
app.controller('parent',函数($scope,$controller){
var childScope=$controller('child',{$scope:$scope});
$scope.Parent=$scope.Child;
$scope.$watch('Child',function(){
$scope.Parent=$scope.Child;
},对);
});
应用程序控制器('子',函数($范围){
$scope.Child=“Child”;
$scope.changeValue=函数(){
$scope.Child=“新建子级”;
}
});
这是父项:{{parent}

这是{{Child}

点击
使用-通过作用域层次结构向上调度事件,即用基本的话-从子控制器通知父控制器

$scope.changeValue = function() {
        $scope.Child = "new child";
        $scope.$emit('onChildChange', {data: $scope.Child});
    }
在父控制器中:

$scope.$on('onChildChange', function (event, result) {
    console.log(result.data)
});
它是如何工作的


关于你的例子:

 var childScope = $controller('child',{$scope: $scope});
 $scope.Parent = $scope.Child; 
 $scope.$watch('Child',function(){
    $scope.Parent = $scope.Child;
 },true);
在父控制器中加载子作用域不是很好的做法。它会导致意外的行为,并且很难处理此类代码。 此外,deepwatch a.e.
$scope.$watch({},true)
是一种会影响性能的过度使用。在我们的例子中,
$emit
将触发事件,监听此事件的人将捕获它。这里没有多余的观察者