如何将指令范围绑定到其属性函数?

时间:2017-05-19 10:55:51

标签: javascript angularjs angularjs-directive

考虑以下角度指令:

<my-datepicker 
     ng-model="myController.user.dob"
     min="1960-01-01" 
     max="2017-12-31"
     isValid="myController.validateDOB(myController.user.dob)"
></my-datepicker>

在这种情况下,validateDOB函数将在控制器的范围内调用。我想在指令范围内调用它以便能够使用其min和max属性。我试着这样做:

<my-datepicker 
     ng-model="myController.user.dob"
     min="1960-01-01" 
     max="2017-12-31"
     isValid="myController.validateDOB.call(this, myController.user.dob)"
></my-datepicker>

失败并出现异常: Error: [$parse:isecff] Referencing call, apply or bind in Angular expressions is disallowed! 有没有解决方法呢?

1 个答案:

答案 0 :(得分:0)

Angular提供了'&'绑定选项,您可以在指令函数中调用conttroller的函数。

家长控制器

app.controller('myCntrl', function($scope) {
    var myController = this;

    myController.validateDOB = function(dob) {
        // some code
    };
})

<强>指令

app.directive('myDatepicker, function() {
    return {
        template: '<button ng-click="handleClick()">Click</button>',
        scope: {
            validateDob: '&'
        },
        controller: function($scope) {
            $scope.handleClick = function() {
                $scope.validateDob({dob: 'dob'})
            };
        }
    }
})

<强>用法:

<div ng-controller="myCntrl">
    <my-datepicker validate-dob="myController.validateDOB(dob)"></my-datepicker>
</div>