在AngularJS中,如何将变量值的变化从子控制器分配给父控制器?
在这段代码中,我们有一个父控制器和一个子控制器。在HTML中,请注意父控制器包含子控制器。在父控制器中,我使用$controller服务,它获取子控制器的作用域。子控制器的$scope.child将分配给$scope.Parent。单击按钮时,会将子控制器中的$scope.Child值更改为“new Child” 我也在尝试在父控制器中实现相同的更改。我希望$scope.Parent通过在$scope.child上放置$watch()来获得作为“new child”的值。但是子控制器的$scope.child的值的更改没有反映在$scope.Parent中 因此,我的问题是如何将子控制器中$scope.Child值的更改分配给父控制器在AngularJS中,如何将变量值的变化从子控制器分配给父控制器?,angularjs,Angularjs,在这段代码中,我们有一个父控制器和一个子控制器。在HTML中,请注意父控制器包含子控制器。在父控制器中,我使用$controller服务,它获取子控制器的作用域。子控制器的$scope.child将分配给$scope.Parent。单击按钮时,会将子控制器中的$scope.Child值更改为“new Child” 我也在尝试在父控制器中实现相同的更改。我希望$scope.Parent通过在$scope.child上放置$watch()来获得作为“new child”的值。但是子控制器的$scop
<!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
将触发事件,监听此事件的人将捕获它。这里没有多余的观察者