我需要在幾個地方訂購表格行。由於只顯示了一個「主」表,因此我決定使用一個相當全局變量$scope.n.order
(其中n
是我收集的重要的n持續變量)。如何從指令中訪問「正確」範圍?
的,而重複的方法工作得很好:
<th ng-click="n.order=['created','id']">Created</tr>
...
<tr ng-repeat="x in m.items | orderBy: n.order">
因爲我想一些order
類添加到排序列(也許更多這樣的事情),我想創建一個相應的指令,這樣我可以寫(我不知道)。我唯一的問題是,該指令無法訪問正確$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
};
其實,我的最後一句話給我帶來了一個 「解決方案」。跟隨父母直到適當的範圍。它的作品,但感覺完全哈克...
一些更多的代碼可以很好地工作 – maurycy
(1)不要忘記在'element.on'處理程序中添加'$ scope。$ apply()'。 (2)你如何指定'n'作用域參數,它不起作用?從'
@NikosParaskevopoulos 1.感謝'$ scope。$ apply()'。 2.名爲'$ scope.n' *的變量* always *存在於* some *封閉範圍中,因爲我總是在每個「page-controller」中創建它。 3.'n =「n」'可能會創建一個新的變量,無論如何,我想保持指令的使用盡可能短。 – maaartinus