Я хочу инициировать сторонний элемент управления (bootstrap-select) после того, как коллекция была назначена исходной переменной. Для этого я использую директиву и смотрю такую коллекцию.
angular
.module('app').directive('bootstrapDropdown', ['$timeout',
function ($timeout) {
return {
restrict: 'A',
scope: {
collectionName: '='
},
require: '?ngModel',
link: function (scope, el, attrs) {
el.selectpicker();
scope.$watchCollection(scope.collectionName, function (newVal) {
$timeout(
function () {
el.selectpicker('refresh');
}
);
});
}
};
}
]);
Если я $watchCollection
имя коллекции как строку в $watchCollection
она отлично работает. Но я ищу общую директиву, поэтому я передаю имя коллекции, например
<select bootstrap-dropdown collection-name="commandGroups" ng-model="vm.Job.CommandGroup" name="ddlCommandGroup">
<option value="">Select Something</option>
<option ng-repeat="cmdGroup in commandGroups" collection-name="commandGroups" value="{{cmdGroup.Id}}">{{cmdGroup.Name}}</option>
</select>
Но он не работает
Имя коллекции является атрибутом на элементе select и не может просто наблюдаться с помощью scope.collectionName, так как это будет возвращено undefined. Вы можете получить значение из атрибута 'collection-name', используя следующую строку в вашей функции ссылок:
scope.collectionName = attrs.collectionName;
Не уверен, что он работает для вас, так как у меня нет данных, но это, вероятно, поможет вам дальше.