将数组传递给angular指令

时间:2015-03-06 21:38:46

标签: javascript angularjs angularjs-directive

我有这个指令,当它出现时将焦点设置在输入字段上,当它失去焦点或按下esc / enter / tab键时隐藏它。它工作得很好,但我想知道是否有一种方法可以传递一个数组或键的对象(和事件类型),而不是将键和事件硬编码到指令本身? 这是代码:

.directive('bindKeys', function ($timeout) {

    return {
        restrict: 'A',
        scope: {
            trigger: '='
        },

        link: function(scope, elem){

            elem.bind('keydown keypress blur', function (event) {
                    if(event.which === 13 || event.which === 9 || event.which === 27 || event.type === 'blur') {
                        event.preventDefault();
                        $timeout(function(){
                            scope.trigger.property = false;
                        });
                    }
                });
            scope.$watch('trigger.property', function(value) {

                if(value === true) {
                    $timeout(function() {
                        elem[0].focus();
                    });
                }
            });
        }
    };
});

元素如下所示:

<input bindKeys trigger='trigger'></input>

由于

1 个答案:

答案 0 :(得分:1)

你确定可以。有一些模块提供你的阵列

.value('events', ['blur', 'keypress'])

然后让它们注入你的指令(事件var名称必须与上面的键匹配)。

.directive('bindKeys', function ($timeout, events) {
    // ...
    element.bind(events.join(' '), function() {})
}

注入数组的替代语法是通过显式定义变量的名称

.directive('bindKeys', ['$timeout', 'events', function ($timeout, events) {})

在此处查看有关依赖注入的更多信息: https://docs.angularjs.org/guide/di

和模块在这里: https://docs.angularjs.org/guide/module