Javascript AngularJS指令变更';s作用域未更新父控制器作用域
HTML:Javascript AngularJS指令变更';s作用域未更新父控制器作用域,javascript,angularjs,Javascript,Angularjs,HTML: Javascript: <div ng-app="myApp" ng-controller="Controller"> <test ng-if="toggle" props="condition"></test> </div> var myApp=angular.module('myApp',[]); myApp.controller('controller',['$scope','$timeout',函数($scope,
Javascript:
<div ng-app="myApp" ng-controller="Controller">
<test ng-if="toggle" props="condition"></test>
</div>
var myApp=angular.module('myApp',[]);
myApp.controller('controller',['$scope','$timeout',函数($scope,$timeout){
$scope.condition=[true];
$scope.toggle=$scope.condition[0];
$scope.$watch('条件',(新值、旧值、范围)=>{
console.log('old:'+oldv);
console.log('new:'+newv);
log('toggle:'+scope.toggle);
},对);
}]);
指令(“测试”,函数(){
返回{
模板:“指令显示”,
替换:正确,
范围:{
道具:“=”
},
控制器:['$scope','$timeout',函数($scope,$timeout){
$scope.props[0]=false;
}]
}
});
其行为是,在指令将条件[0]
更改为false后,我可以在控制台日志中看到新值,但切换
不会更新。我的问题是:
当
条件[0]
更改时,为什么切换
不更新?为什么摘要周期不同时更新切换
?或者,当分配的值发生变化时,摘要循环是否会更新切换
我不是要解决这个问题,而是要找出这个问题的原因
谢谢 尝试删除指令配置中的
replace:true
使用replace:true
时,它将用内容替换指令标记,因此您将丢失ngIf
指令,因为toggle
的初始值为true
var myApp = angular.module('myApp', []);
myApp.controller('Controller', ['$scope', '$timeout', function($scope, $timeout) {
$scope.condition = [true];
$scope.toggle = $scope.condition[0];
$scope.$watch('condition', (newv, oldv, scope) => {
console.log('old: ' + oldv);
console.log('new: ' + newv);
console.log('toggle: ' + scope.toggle);
}, true);
}]);
myApp.directive("test", function() {
return {
template: '<div>directive show</div>',
replace: true,
scope: {
props: "="
},
controller: ['$scope', '$timeout', function($scope, $timeout) {
$scope.props[0] = false;
}]
}
});
将被替换为
<test ng-if="toggle" props="condition"></test>
指令显示
因此,结果将是
<div>directive show</div>
指令显示
对我来说,你的问题是这样的:
var a=false;
var b=a;
控制台日志(a,b);
var b=真;
控制台日志(a,b)
如果,我认为它不会丢失ng。我在问这个问题的原因,而不是解决办法。谢谢对不起,我把问题修改得更清楚了。为什么摘要周期不同时更新切换
?或者,当分配的值更改时,摘要循环是否会更新切换
?
<div ng-app="myApp" ng-controller="Controller">
<div>directive show</div>
</div>