Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.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 当指令控制器使用Angular读取时,指令链接中的作用域变量不会更新为_Javascript_Jquery_Angularjs_Angularjs Directive - Fatal编程技术网

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()}