Я новичок в Angular и все еще мучительно обволакиваю голову вокруг пользовательских директив.angularjs pass 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
Используя предложения ниже, я получил его работать с UI-выбора, но внешняя модель не обновляется вообще, см plnkr.co/edit/Y43dmMGIc5GxM9fLoNPW, вероятно, потому, что ребенок сфера и родительская сфера остается одна и та же?
UPDATE 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>
Я был бы очень рад, если бы кто-нибудь может объяснить, что происходит («рабочий» экса mple здесь http://plnkr.co/edit/B53F9sc7UGkj0uxUpC17 )
Если я не ошибаюсь, охват ребенка имеет доступ к его родителям, не делая ничего. Если вам требуется повторное использование, вам следует, вероятно, следовать приведенным ниже ответам и передать свойство через атрибут дочерней директивы. – furier