Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.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 触发自定义指令的更改_Javascript_Jquery_Angularjs - Fatal编程技术网

Javascript 触发自定义指令的更改

Javascript 触发自定义指令的更改,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我试图让我的自定义指令激活ngChange事件,以便原始控制器在指令中的数据发生更改时执行某些操作 我的指令如下所示: .directive('spInputCheckbox', function() { return { scope: { ngModel: '=', ngChange: '&' }, restrict: 'AE',

我试图让我的自定义指令激活ngChange事件,以便原始控制器在指令中的数据发生更改时执行某些操作

我的指令如下所示:

.directive('spInputCheckbox', function() {
        return {
            scope: {
                ngModel: '=',
                ngChange: '&'
            },
            restrict: 'AE',
            replace: 'true',
            template: '<div><span ng-click="model = !model"><i ng-if="model">X</i></span><input type="checkbox" ng-model="model" ng-change="change(model)" /><span ng-if="title">{{ title }}</span></div>',
            link: function(scope, elem, attr){
                    scope.title = attr.title
                scope.$watch('ngModel', function(value){
                    if(value){
                        scope.model = scope.ngModel
                    }
                });

                scope.change = function(value){
                    scope.ngModel = scope.model
                    scope.ngChange()
                }
            }
        };
    })
.directive('spInputCheckbox',function(){
返回{
范围:{
ngModel:“=”,
ngChange:“&”
},
限制:“AE”,
替换为:“true”,
模板:“X{{title}}”,
链接:功能(范围、要素、属性){
scope.title=attr.title
范围:$watch('ngModel',函数(值){
如果(值){
scope.model=scope.ngModel
}
});
scope.change=函数(值){
scope.ngModel=scope.model
scope.ngChange()
}
}
};
})
我这样称呼它

<sp-input-checkbox ng-model="info"
      ng-init="info = false"
      title="click me"
      ng-change="alert(7)" />


这是一个带有代码的示例

由于更改是一个单击事件,您可以使用
ng click
。可以为
ng click
事件调用范围函数

$scope.modified=function(){
警觉(7);
};


也许观看模型可以像这样实现你想要的

scope.$watch('model', function(value){
    if(value){
        scope.ngModel = scope.model
        hasChange = true
    }

    if(hasChange) {
             scope.change()
    }
});

查看整个代码

这将显示警报。但我要找的是,不要启动ng变革活动。但既然它是一个复选框,而且单击是唯一可能的更改,为什么您需要ng更改事件?如果它不是复选框,请说输入type=“text”否,这正是困扰我的问题,我无法让ng更改正常工作,无论是type=“text”还是type=“checkbox”如果您感兴趣,可以举一个不使用
ng change
ng click
的示例。