我已经遵循了有关“选择和角度”的出色教程(链接)(代码几乎相同)
这是我的指令:
app.angularModule.directive('chosen', function() { var linker = function (scope, element, attrs) { var list = attrs['chosen']; scope.$watch(list, function () { element.trigger('chosen:updated'); }); element.chosen({ width: '350px'}); }; return { restrict: 'A', link: linker }; });
这是html:
<select data-placeholder="Choose a Category" multiple class="col-lg-8 chosen-select" chosen="items" ng-options="item._backingStore.Name for item in items" ng-model="selectedCategories" > </select>
我想要的是,当用户单击编辑按钮时,弹出模式窗口,并在模式窗口中选择在单击编辑按钮之前选择的类别。
这是控制器的一部分:
$scope.$watch(function() { return adminCrudService.getCategoriesForUpdate(); }, function() { $scope.action = "edit"; $scope.categoriesForUpdate = adminCrudService.getCategoriesForUpdate(); if ($scope.categoriesForUpdate.length > null) { $scope.selectedCategories = _.filter($scope.items, function (item) { return _.contains($scope.categoriesForUpdate, item); }); } });
我已经记录了 $ scope.selectedCategories ,它们一切都很好,但是由于某种原因,在选择中什么都没有选择。
那么我在做什么错了,我该如何解决呢?
编辑
我注意到,当我选择一些项目,关闭模式,再次打开它时,尽管我将这一行放在$ watch中,但选择的值又出现了
$scope.selectedCategories = "";
编辑2
所以我离开了一段时间,因为我还有很多重要的事情要处理。我尝试了没有选择,即使用“正常”选择和代码的作品。因此,明确地说,我选择的指令无法正常工作。
我已经解决了,解决方案实际上非常容易和直接(当您了解Angular指令的工作原理时)。这是指令的完整代码:
app.angularModule.directive('chosen', function() { var linker = function (scope, element, attrs) { var list = attrs['chosen']; scope.$watch(list, function () { element.trigger('chosen:updated'); }); scope.$watch(attrs['ngModel'], function() { element.trigger('chosen:updated'); }); element.chosen({ width: '350px'}); }; return { restrict: 'A', link: linker }; });