如何访问"权利"范围内的指令?

时间:2014-06-17 11:07:10

标签: angularjs angularjs-directive angularjs-scope

我需要在几个地方订​​购表格行。由于只显示了一个“主”表,我决定使用一个相当全局的变量$scope.n.order(其中n是我 n 的重要集合 n on-persisted变量)。

相当重复的方法很好用:

<th ng-click="n.order=['created','id']">Created</tr>
...
<tr ng-repeat="x in m.items | orderBy: n.order">

由于我想在排序列中添加一些order类(也许还有更多这样的东西),我想创建一个相应的指令,以便我可以编写

<th my-order=created>Created</th>
相反(没有大赢,我知道)。我唯一的问题是该指令无法访问正确的$scope ...在调试器中我可以看到我必须访问$scope.$parent.$parent.$parent或类似。什么是正确的方法来实现它?我不知道控制器的名称,所以我不能使用require。我只知道它是“我的主要”控制器(负责整个页面)。


根据请求我正在添加一些代码,但我担心它没有解释,因为问题是只能访问适当的范围。适当的范围可以定义为具有我需要的变量的范围。 ;)

.directive('myOrder', function($location) {
    function link($scope, element, attr) {
        var list = $scope.myOrder.split(/,/);
        element.on('click', function() {
            $scope.n.order = list;
        });
    };

    return {
        restrict: 'A',
        // I've tried also `scope: false` and leaving it out and whatever...
        scope: {
            myOrder: "@", // this works
            n: "=" // this doesn't as `n` is many scopes away
        },
        link: link
    };

实际上,我的最后一句话让我想到了一个“解决方案”。跟随父母直到适当的范围。它有效,但感觉完全是hacky ......

1 个答案:

答案 0 :(得分:0)

我看到我混淆了事情(再一次)。我应该决定是否需要一个孤立的范围,或继承,或者根本不需要。我实际上不需要范围,因为我的指令用作

<th my-order=created>Created</th>

应该覆盖名为n并设置

的哈希的封闭元素的范围
`n.myOrder = "created"

这是hacky,并且在多个这样的命令的情况下不可重用,但对我来说没关系,因为总是有一个主表要排序,所以我使用了一个排序列变量名称的约定(将此名称作为争论是需要的明显延伸)。孤立的范围很好,我需要的只是

  $scope.$parent.n.order = list;

使用调试后我看不到$scope.$parent,这让我误入歧途。事实上,它不存在,但它原型继承,所以一切都很好。