Javascript 当指令控制器使用Angular读取时,指令链接中的作用域变量不会更新为
这是我的密码Javascript 当指令控制器使用Angular读取时,指令链接中的作用域变量不会更新为,javascript,jquery,angularjs,angularjs-directive,Javascript,Jquery,Angularjs,Angularjs Directive,这是我的密码 var directive = { restrict: 'E', templateUrl: '/static/myTemplate.html', scope: { }, controller: ["$scope", controllerFunc], controllerAs: 'multiCheckboxCtrl', bindToController: true,
var directive = {
restrict: 'E',
templateUrl: '/static/myTemplate.html',
scope: {
},
controller: ["$scope", controllerFunc],
controllerAs: 'multiCheckboxCtrl',
bindToController: true,
link: linkFunc,
};
return directive;
function controllerFunc($scope) {
// $watch List
/**
* Event handler for searchText change
*/
$scope.$watch(angular.bind(this, function () {
return $scope.multiCheckboxCtrl.clickedElsewhere.value;
}), function (newVal) {
if (newVal !== undefined && newVal !== "") {
console.log(newVal);
console.log("I am here");
}
});
}
function linkFunc(scope, element, attr){
// Detect Element Click Logic
scope.multiCheckboxCtrl.clickedElsewhere = {value: false};
$document.on('click', function(){
scope.multiCheckboxCtrl.clickedElsewhere.value = false;
console.log(scope.multiCheckboxCtrl.clickedElsewhere);
});
element.on('click', function(){
event.stopPropagation();
scope.multiCheckboxCtrl.clickedElsewhere.value = true;
console.log(scope.multiCheckboxCtrl.clickedElsewhere);
});
// End Detect Element Click Logic
}
linkFunc基本上确定是否单击了指令元素
我验证了每当单击directive元素时,它都会显示为true,而当单击directive元素之外的任何元素时,它都会显示为false
但是,控制器中我的$watch
似乎没有捕捉到变化
谁能告诉我出了什么问题吗
谢谢,我不知道事件侦听器中的对象属性发生了更改 比如说:
$apply()
用于从角度框架外部执行角度表达式。(例如,来自浏览器DOM事件
,setTimeout
,XHR
或第三方库)。因为我们正在调用angular框架,所以我们需要执行异常处理、执行监视的适当范围生命周期
现场示范
角度模块('ExampleApp',[])
.controller('ExampleController',函数($scope){
})
.directive('clickDirective',function(){
var指令={
限制:'E',
模板:“单击我”,
作用域:{},
控制器:[“$scope”,controllerFunc],
controllerAs:'multiCheckboxCtrl',
bindToController:对,
链接:linkFunc,
};
返回指令;
函数控制器Func($scope){
//美元观察名单
/**
*searchText更改的事件处理程序
*/
$scope.$watch(函数(){
返回$scope.multiCheckboxCtrl.clickedElsewhere.value;
},函数(newVal){
如果(newVal!==未定义&&newVal!==“”){
console.log(newVal);
console.log(“我在这里”);
}
});
}
函数linkFunc(范围、元素、属性){
//检测元素点击逻辑
scope.multiCheckboxCtrl.clickedElsewhere={
值:false
};
元素(文档).on('click',function()){
scope.multiCheckboxCtrl.clickedElsewhere.value=false;
log(scope.multiCheckboxCtrl.clickedElsewhere);
作用域:$apply();
});
元素上('click',function()){
event.stopPropagation();
scope.multiCheckboxCtrl.clickedElsewhere.value=true;
log(scope.multiCheckboxCtrl.clickedElsewhere);
作用域:$apply();
});
//结束检测元素点击逻辑
};
});代码>
点击别处
我不知道事件侦听器中的对象属性发生了更改
比如说:
$apply()
用于从角度框架外部执行角度表达式。(例如,来自浏览器DOM事件
,setTimeout
,XHR
或第三方库)。因为我们正在调用angular框架,所以我们需要执行异常处理、执行监视的适当范围生命周期
现场示范
角度模块('ExampleApp',[])
.controller('ExampleController',函数($scope){
})
.directive('clickDirective',function(){
var指令={
限制:'E',
模板:“单击我”,
作用域:{},
控制器:[“$scope”,controllerFunc],
controllerAs:'multiCheckboxCtrl',
bindToController:对,
链接:linkFunc,
};
返回指令;
函数控制器Func($scope){
//美元观察名单
/**
*searchText更改的事件处理程序
*/
$scope.$watch(函数(){
返回$scope.multiCheckboxCtrl.clickedElsewhere.value;
},函数(newVal){
如果(newVal!==未定义&&newVal!==“”){
console.log(newVal);
console.log(“我在这里”);
}
});
}
函数linkFunc(范围、元素、属性){
//检测元素点击逻辑
scope.multiCheckboxCtrl.clickedElsewhere={
值:false
};
元素(文档).on('click',function()){
scope.multiCheckboxCtrl.clickedElsewhere.value=false;
log(scope.multiCheckboxCtrl.clickedElsewhere);
作用域:$apply();
});
元素上('click',function()){
event.stopPropagation();
scope.multiCheckboxCtrl.clickedElsewhere.value=true;
log(scope.multiCheckboxCtrl.clickedElsewhere);
作用域:$apply();
});
//结束检测元素点击逻辑
};
});代码>
点击别处
尝试在作用域之后添加事件侦听器函数。$apply()
。与此类似,$document.on('click',function(){scope.multiCheckboxCtrl.clickedElsewhere.value=false;console.log(scope.multiCheckboxCtrl.clickedElsewhere);scope.$apply()})
尝试在scope.$apply()之后添加到事件侦听器函数。像这样$document.on('click',function(){scope.multiCheckboxCtrl.clickedElsewhere.value=false;console.log(scope.multiCheckboxCtrl.clickedElsewhere);scope.$apply()}