我是Angular的新手,仍然痛苦地將自己的頭包裹在自定義指令中。angularjs將ngModel從包裝指令傳遞到包裝指令
我想用它包裝成我的自定義指令重複使用HTML
<ui-select ng-model="model.selectedLanguages" multiple search-enabled="true" theme="select2" style="width: 300px;">
<ui-select-match placeholder="Pick one...">{{$item.name}}</ui-select-match>
<ui-select-choices repeat="lang.id as lang in langs |filter: { name : $select.search }">
<div ng-bind-html="lang.name | highlight: $select.search" ></div>
</ui-select-choices>
</ui-select>
的該位:
<language-picker ng-model="model.selectedLanguages"/>
是這樣的:
app.directive('languagePicker', function() {
return {
template : '<ui-select ng-model="**PARENT'S NGMODEL**" multiple search-enabled="true" theme="select2" style="width: 300px;"><ui-select-match >{{$item.name}}</ui-select-match><ui-select-choices repeat="lang.id as lang in langs | filter: { name : $select.search }"><div ng-bind-html="lang.name | highlight: $select.search"></div></ui-select-choices></ui-select>',
restrict : 'E',
require : 'ngModel',
replace : true
....
};
});
但是怎麼辦我將ngModel從language-picker
傳遞給ui-select
指令?
UPDATE
使用下面的建議,我得到了它的用戶界面,選擇工作,但外模式沒有得到所有更新,請參閱plnkr.co/edit/Y43dmMGIc5GxM9fLoNPW,可能是因爲它的子範圍和父範圍保持相同?
更新2
我得到了它在看起來可怕給我一個令人費解的方式工作,因爲我不知道爲什麼它「作品」擺在首位(見怪異的東西在發生控制器):
app.directive('languagePicker', function(LanguageService) {
return {
templateUrl : 'LanguagePickerTpl.html',
restrict : 'E',
scope : {
languages : '='
},
controller : function($scope, LanguageService) {
console.log($scope);
$scope.langs = LanguageService.get();
$scope.model = $scope;
}
};
})
模板:
<ui-select ng-model="model.languages" multiple search-enabled="true"
theme="select2" style="width: 300px;">
<ui-select-match>{{$item.name}}</ui-select-match>
<ui-select-choices repeat="lang.id as lang in langs | filter: { name : $select.search }">
<div ng-bind-html="lang.name | highlight: $select.search"></div>
</ui-select-choices>
</ui-select>
我將非常高興,如果有人能解釋這是怎麼回事(以下簡稱 「工作」 EXA mple在這裏 http://plnkr.co/edit/B53F9sc7UGkj0uxUpC17 )
如果我沒有弄錯,孩子的範圍可以在沒有做任何事情的情況下訪問父母的財產。如果你關心重用性,你應該遵循下面描述的答案,並通過子指令的屬性傳遞屬性。 – furier