我需要在几个地方订购表格行。由于只显示了一个“主”表,我决定使用一个相当全局的变量$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 ......
答案 0 :(得分:0)
我看到我混淆了事情(再一次)。我应该决定是否需要一个孤立的范围,或继承,或者根本不需要。我实际上不需要范围,因为我的指令用作
<th my-order=created>Created</th>
应该覆盖名为n
并设置
`n.myOrder = "created"
这是hacky,并且在多个这样的命令的情况下不可重用,但对我来说没关系,因为总是有一个主表要排序,所以我使用了一个排序列变量名称的约定(将此名称作为争论是需要的明显延伸)。孤立的范围很好,我需要的只是
$scope.$parent.n.order = list;
使用调试后我看不到$scope.$parent
,这让我误入歧途。事实上,它不存在,但它原型继承,所以一切都很好。