从自定义指令

时间:2017-02-21 13:57:04

标签: javascript jquery angularjs

我试图获取我的自定义指令来激活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()
                }
            }
        };
    })

以及我的称呼方式

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

这里有JsFiddle代码

2 个答案:

答案 0 :(得分:0)

由于更改是点击事件,因此您可以使用ng-click。可以为ng-click事件调用范围函数。

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

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

Solution

答案 1 :(得分:0)

也许观看模型可以做到你想要实现的目标

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

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

查看完整代码here