[英]AngularJS: Why does $element.find('option') return an empty array when using ng-options?
在Angular 1.4中,我使用ngOptions
指令根据如下对象填充<select>
标记和<option>
标记:
{black: '#000000', red: '#FF0000', ...}
使用ng-options="value as key for (key, value) in vm.colors"
这很好用,但是现在我想向与该键匹配的每个选项标签中添加一个类(例如'.black','。red ')。 我的想法是简单地找到option
元素并使用addClass()
,但是我在获取这些元素时遇到了麻烦。 (注意:我没有使用jQuery,而是想避免为此添加它。)
我希望能够将$element.find('option')
的结果绑定到我的视图模型,然后使用$scope.$watch('vm.options', function() {...})
观看它,但是当我将vm.options
登录到控制台时,我看到的只是一个空数组。
我在这里错误地使用$scope.$watch
吗? $element
有问题吗? 我的控制器无法访问ngOptions
范围内的元素吗? 还是我只是犯了一个愚蠢的错误?
任何帮助将不胜感激...提前感谢!
文档非常清楚,DOM操作只能在指令中完成。 我使用以下经验法则:如果我发现自己想要或需要使用angular.element,则需要一个指令。
在这种情况下,可以使用内置的ngStyle指令:
(function() { 'use strict'; var hexColors = { black : '#000000', red : '#FF0000', green : '#00FF00', blue : '#0000FF' }; angular.module('sandbox', []) .constant('hexColors', hexColors) .controller('SandboxController', SandboxController) ; function SandboxController($element, $scope) { var vm = this; vm.colors = hexColors; vm.selected = '#000000'; } })();
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.js"></script> <div ng-app="sandbox" ng-controller="SandboxController as vm"> <select ng-model="vm.selected" ng-options="value as key for (key, value) in vm.colors"></select> <p ng-style="{'background-color': vm.selected, color: 'white'}">Hex: {{ vm.selected }}</p> </div>
好的,所以我试图观察返回option
元素的函数的结果,但是我应该做的就是观察返回length
属性的函数: $element.find('option').length
。
这是一个jsfiddle ,其行为与我最初预期的一样。
最终放倒我送行的线索是这条评论中ngOptions
代码,这提醒了我,“ngModel只手表对象身份的转变”。
这就回答了我的问题,但是正如@ jme11指出的那样,您无法设置option
元素的样式,因此不会帮助我实现目标。
但是,这看起来可能像这样: https : //github.com/angular-ui/ui-select
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.