Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS指令变更';s作用域未更新父控制器作用域_Javascript_Angularjs - Fatal编程技术网

Javascript AngularJS指令变更';s作用域未更新父控制器作用域

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,

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,$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>