2014-03-02 17 views
0

我想在指令中訪問一個變量,在這種情況下map不需要預先定義,就像將它設置爲directrive map =「someValue」的屬性一樣。我也不想使用範圍。$ apply,因爲我實際上只想在指令的隔離範圍內使用變量。這甚至有可能嗎? 這裏最好的做法是什麼?基本上我的指令需要做到這兩點。訪問父範圍,並有我自己的範圍,我可以建立模板。Angular JS:如何在指令本地範圍上設置屬性,我可以在模板中使用?

謝謝大家。

這裏我的JS代碼:

.directive('myFilter', function() { 
    return { 
     restrict: 'E', 
     scope: { 
      source: '=source', 
      key: '=key', 
     }, 
     link: function(scope, element, attrs) { 
      scope.$on('dataLoaded', function(e) { 
       scope.map = {}; 
       angular.forEach(scope.source, function(paramObj) { 
        if (!scope.map[paramObj[scope.key]]) { 
         var newEntry = { 
          value: paramObj[scope.key], 
          isChecked: false 
         } 
         scope.map[paramObj[scope.key]] = newEntry; 
        } 
       }); 
      }); 
     } 
    } 
}); 

和我的html:

<my-filter source="metaPara.filteredParameters" key="'value'"> 
    <table class="table table-borered"> 
     <tr data-ng-repeat="item in map"> 
      <td>{{item.value}}</td> 
     </tr> 
    </table> 
</my-filter> 
+0

如果使用=鍵或什麼的,它的雙向綁定到你的控制器範圍的變量。如果您使用&鍵,則不會。那是你需要做的嗎? –

+0

而不是'鏈接'嘗試給指令一個控制器;那麼你應該可以在控制器中創建一個$ scope變量,該變量可用於該模板,但不會暴露給使用該指令的人(我認爲) – JeffryHouser

回答

1

您可能要參考角文檔的指令,再次。

如果你想要一個孤立作用域(其中有祖先沒有訪問權限的範圍內),然後用

scope : { /* ... */ } 

否則,如果你想要一個獨特的範圍,這確實有權訪問的祖先在

,使用

scope : true 

然後,你可以把你的HTML修改或事件監聽(即不依賴於NG-點擊或別的東西角已經基本覆蓋)

link : function (scope, el, attrs, controller) { } 

...你可以把你所有的定時執行的

controller : ["$scope", function ($scope) { 
    var myController = this; 
    myController.property = "12"; 
}], 
controllerAs : "myController" 

所以裏面,在你的模板,你可以說:

<span>{{ myController.property }}</span> 

您還可以使用預您通過以下名稱呼叫的註冊控制器:

controller : "mySimpleController", 
controllerAs : "myController" 

此外,而不是使用$scope.$apply,我建議使用$timeout(必須注入)。

不同之處在於$scope.$apply只能在某些點上工作 - 如果你已經在摘要循環中,它會拋出一個錯誤,而不會更新任何東西。
$timeout()將更新設置爲下一個更新週期。

理想情況下,您應該知道您是否需要$apply,並且能夠保證您只在一個地點,每次更新/摘要中使用它,但是$timeout將使您免於您不一定確定。

+0

謝謝。這幾乎是我所期待的。 – user3371870

相關問題