如何观察绑定到父控制器的变量?
function config($stateProvider) {
$stateProvider
.state('home', {
url: '/',
templateUrl: 'home.html',
controller: 'HomeController',
controllerAs: 'vm'
})
.state('home.child', {
url: '/child',
templateUrl: 'child.html',
controller: 'ChildController',
controllerAs: 'vm'
});
}
function HomeController($scope) {
this.title = 'Some Title';
}
function ChildController($scope) {
var vm = this;
$scope.$watch('vm.title', function(current, original) {
$log.info('title was %s', original);
$log.info('title is now %s', current);
});
}
watch-Function无法识别父标题的更改。
谢谢! :)
答案 0 :(得分:6)
在引用属于父对象的对象时,只需访问$parent
范围。还习惯了更清晰,更标准化的构建控制器JS的方法。
HTML
<html ng-app="myApp">
<body>
<div ng-controller="HomeController">
<input type="text" ng-model="title">
<div ng-controller="ChildController"></div>
</div>
</body>
</html>
JS
var app = angular.module("myApp", []);
app.controller("HomeController", ['$scope', '$log', function ($scope, $log) {
$scope.title = "Some Title";
}]);
app.controller("ChildController", ['$scope', '$log', function ($scope, $log){
$scope.$watch('$parent.title', function(newValue, oldValue) {
$log.info('title was %s', oldValue);
$log.info('title is now %s', newValue);
});
}]);
答案 1 :(得分:0)
家长控制器:
$scope.cancelFlag = false;
儿童控制器:
1)$parent.cancelFlag
指父控制器。
2)如果我们在父控制器中进行任何更改,将在子控制器中调用watch。
示例:
$scope.cancelFlag = true or false;
3)这里我们可以通过在父控制器中进行更改来调用子控制器方法。
$scope.$watch('$parent.cancelFlag',
function (newVal, oldVal)
{
if (newVal != null && newVal==true)
$scope.childControllerMethod();
});
$scope.childControllerMethod= function () { };