Javascript AngularJS:为什么$element.find(';option';)在使用ng选项时返回空数组?

Javascript AngularJS:为什么$element.find(';option';)在使用ng选项时返回空数组?,javascript,angularjs,ng-options,jqlite,Javascript,Angularjs,Ng Options,Jqlite,在Angular 1.4中,我使用ngOptions指令,基于如下所示的对象,使用标记填充标记: {black: '#000000', red: '#FF0000', ...} 使用vm.colors中的ng options=“value as key for(key,value)”可以很好地工作,但是现在我想为每个与键匹配的选项标记添加一个类(例如,.black'、.red')。我的想法是简单地找到选项元素并使用addClass(),但是我在获取这些元素时遇到了麻烦。(注意:我没有使用jQu

在Angular 1.4中,我使用
ngOptions
指令,基于如下所示的对象,使用
标记填充
标记:

{black: '#000000', red: '#FF0000', ...}
使用vm.colors中的
ng options=“value as key for(key,value)”
可以很好地工作,但是现在我想为每个与键匹配的选项标记添加一个类(例如,.black'、.red')。我的想法是简单地找到
选项
元素并使用
addClass()
,但是我在获取这些元素时遇到了麻烦。(注意:我没有使用jQuery,我不想仅仅为了这个而添加它。)

我希望能够将
$element.find('option')
的结果绑定到我的视图模型,然后使用
$scope.$watch('vm.options',function(){…})
来观察它,但是当我将
vm.options
记录到控制台时,我看到的只是一个空数组

我是否在此处错误地使用了
$scope.$watch
?这是
$element
的问题吗?
ngOptions
范围内的元素是否无法从我的控制器访问?还是我只是犯了个愚蠢的错误

任何帮助都将不胜感激…提前感谢

很明显,DOM操作只能在指令中完成。我使用这个经验法则:如果我发现自己想要或需要使用angular.element,那么我需要一个指令

在这种情况下,可以使用内置的ngStyle指令:

(函数(){
"严格使用",;
var hexColors={
黑色:“000000”,
红色:“FF0000”,
绿色:“#00FF00”,
蓝色:“#0000FF”
};
angular.module('sandbox',[])
.constant('hexColors',hexColors)
.controller('SandboxController',SandboxController)
;
函数SandboxController($element,$scope){
var vm=这个;
vm.colors=hexColors;
vm.selected='#000000';
}
})();

十六进制:{{{vm.selected}

很明显,DOM操作只能在指令中完成。我使用这个经验法则:如果我发现自己想要或需要使用angular.element,那么我需要一个指令

在这种情况下,可以使用内置的ngStyle指令:

(函数(){
"严格使用",;
var hexColors={
黑色:“000000”,
红色:“FF0000”,
绿色:“#00FF00”,
蓝色:“#0000FF”
};
angular.module('sandbox',[])
.constant('hexColors',hexColors)
.controller('SandboxController',SandboxController)
;
函数SandboxController($element,$scope){
var vm=这个;
vm.colors=hexColors;
vm.selected='#000000';
}
})();

十六进制:{{{vm.selected}


好的,所以我试图查看返回
选项
元素的函数的结果,但我应该做的是查看返回
长度
属性的函数:
$element.find('option')。length

这正是我最初所期望的

最终给我通风报信的线索是
ngOptions
代码,它提醒我“ngModel只监视对象标识的变化”

这回答了我的问题,但正如@jme11所指出的,您不能设置
选项
元素的样式,因此它不能帮助我实现目标


但是,这看起来可能是这样的:

好的,所以我试图查看返回
option
元素的函数的结果,但我应该做的是查看返回
length
属性的函数:
$element.find('option').length

这正是我最初所期望的

最终给我通风报信的线索是
ngOptions
代码,它提醒我“ngModel只监视对象标识的变化”

这回答了我的问题,但正如@jme11所指出的,您不能设置
选项
元素的样式,因此它不能帮助我实现目标


然而,这看起来可能是:

为什么不尝试使用ng类而不是$element。选择??使用手表也不是一个好的策略。这可能会降低你的应用程序的速度,我不想使用$watch,这正是我的疑难解答导致的。你能举个例子说明在这种情况下如何使用ngClass吗?我不确定,但我认为这个问题是jqLite特有的,因为源代码中有这样一条注释:这肯定是一个绑定问题,在摘要期间,我的options变量不会触发更新。在我最初的JSFIDLE的这个分支中,我能够使用带有ngClick的按钮获得选项:为什么不尝试使用ng类而不是$element??使用手表也不是一个好的策略。这可能会降低你的应用程序的速度,我不想使用$watch,这正是我的疑难解答导致的。你能举个例子说明在这种情况下如何使用ngClass吗?我不确定,但我认为这个问题是jqLite特有的,因为源代码中有这样一条注释:这肯定是一个绑定问题,在摘要期间,我的options变量不会触发更新。在我最初的JSFIDLE的这个分支中,我能够使用带有ngClick的按钮获得选项:为什么不尝试使用ng类而不是$element??使用手表也不是一个好的策略。这可能会降低你的应用程序的速度,我不想使用$watch,这正是我的疑难解答导致的。你能举一个例子说明在这种情况下如何使用ngClass吗?我不确定,但我认为这个问题是jqLite特有的,因为源代码中有这样一条注释:这肯定是一个绑定问题,我的选项在这里是可变的