访问Angular属性中的另一个属性

时间:2015-01-13 11:53:52

标签: javascript angularjs angularjs-directive

我有一个名为selectable的指令,当键盘箭头选择项目(在网格中)时,它会向元素添加selected属性。然后我有另一个名为remote-action的指令。

是否可能像remote-action="hasAttribute('selected') ? 'Open' : false"这样的地方hasAttribute正是我正在寻找的,或者是在不同属性的值内获取另一个属性值的方法。

不是每个selectable都会有remote-action,反之亦然,所以我认为我不能在任何一个指令的代码中执行此操作,也有些元素会有孤立的范围而有些元素会赢得'吨。

1 个答案:

答案 0 :(得分:0)

我建议采用require配置选项和selectable指令上的控制器来公开selected属性。代码大纲:

app.directive('selectable', function() {
    return {
        ...
        controller: function($scope, $element) {
            var self = this;

            this.selected = false; // (1)

            $element.on('...', function() {
                $scope.$apply(function() {
                    self.selected = ... // (2)
                });
            });
        }
    };
});

app.directive('remoteAction', function() {
    return {
        ...
        require: '?selectable', // (3)
        link: function(scope, elem, attrs, selectableCtrl) {
            if( selectableCtrl !== null ) { // (4)
                scope.$watch( // (5)
                    function() {
                        return selectableCtrl.selected;
                    },
                    function(newval, oldval) {
                        ...
                    }
                );
            }
        }
    };
});

说明:

  1. selectable指令有一个公开selected属性
  2. 的控制器
  3. 根据某些逻辑更新selected属性 - 在上面的示例中发生DOM事件时
  4. remoteAction指令可选择在同一元素中使用selectable指令
  5. 如果未找到协作指令,则角度传递null作为控制器
  6. remoteAction指令监视selected属性的值并相应地采取措施
相关问题