2014-03-28 41 views
1

對於在指令模板中定義的輸入,我想將其模型綁定到其父作用域上的屬性。由於指令的多個實例在頁面上,因此隔離範圍是必需的。我想避免必須在指令聲明中將模型作爲屬性傳遞。看來這應該是可能的;但它不起作用。有沒有辦法從父範圍綁定到模型而不將其作爲屬性傳遞給指令的隔離範圍?

指令:

catalogApp.directive("cmFieldFilterDtv", function() { 
    return { 
     templateUrl: "/templates/directives/field-filter-dtv.html", 
     restrict: 'E', 
     scope: {}, 
     link: function (scope, element, attrs) { 
      var field = attrs.fid; 
      var fieldCamel = field.toLowerCaseFirst(); 
      scope.fid = 'filter' + field; 
      scope.model = scope.$parent['filters.' + fieldCamel]; 
      scope.options = scope.$parent['configFilter' + field]; 
     } 
    } 

}); 

模板:

<input id="{{fid}}" 
     ng-model="model" 
     data-kendo-multi-select 
     data-k-options="options" /> 

頁:

<cm-field-filter-dtv fid="PartNumber"></cm-field-filter-dtv> 
<cm-field-filter-dtv fid="PartType"></cm-field-filter-dtv> 
<cm-field-filter-dtv fid="Status"></cm-field-filter-dtv> 

選擇要輸入的更改不會得到推(通過模型綁定)母公司範圍的財產。

+0

一般來說,我將指令視爲全功能封裝單元。因此,每個人都沒有「父母」的範圍。這聽起來像你想添加一個未定義的全局依賴到你的代碼,我通常認爲這是一個壞主意。也就是說,我認爲你可以將變量存儲在$ rootscope而不是$ scope中;那麼它應該可以在包含該指令的視圖的指令和控制器中訪問。 – JeffryHouser

回答

0

爲什麼你不能通過它?在這兩種情況下,你可以做這樣的事情:

catalogApp.directive("cmFieldFilterDtv", function() { 
    return { 
     templateUrl: "/templates/directives/field-filter-dtv.html", 
     restrict: 'E', 
     scope: {}, 
     link: function (scope, element, attrs) { 
      var field = attrs.fid; 
      scope.fieldCamel = field.toLowerCaseFirst(); 
      scope.fid = 'filter' + field; 
      scope.options = scope.$parent['configFilter' + field]; 
     } 
    } 

}); 

模板:

<input id="{{fid}}" 
     ng-model="$parent['filters.' + fieldCamel]" 
     data-kendo-multi-select 
     data-k-options="options" /> 
0

scope.$parent應該給你訪問父範圍。它看起來像這個問題可能是這裏...

scope.model = scope.$parent['filters.' + fieldCamel]; 

是否父範圍有一個屬性名爲'filters.' + fieldCamel(例如$scope["filters.foo"])?還是它有一個名爲filters的屬性,其中包含其他值(例如$scope.filters.foo)?如果是後者,則需要將其更改爲...

scope.model = scope.$parent['filters'][fieldCamel]; 

或者

scope.model = scope.$parent.filters[fieldCamel]; 

但正如其他人所說的,你不想對夫婦一個指令到其父範圍。考慮讓所有東西都通過。

+0

'filters'是一個具有'fieldCamel'屬性的對象字面值。但是,使用正確的語法不能解決此問題。我不知道爲什麼;但我懷疑它與kendo-angular庫有關。相反,如果我通過:scope:{model:'='}'將模型傳遞給指令,它就可以工作。由於我有大約1000個這樣的指令要聲明,所以我寧願只傳遞一個屬性而不是三個屬性。傳遞模型作爲唯一的屬性起作用,而其他兩個參數可以從中推斷出來。 – CalvinDale

相關問題