如何连接 angularjs jqlite 的结果?
How does one concat the results of angularjs jqlite find?
我正在研究一个指令,该指令将基于 rootScope 变量禁用页面上的所有表单元素(类似于手动向每个项目添加 ng-disabled,但只是一种更方便的方法。我正在修改一个现有的应用程序,不想挖掘一堆模板)
我需要能够连接多个 jqlite .find() 语句的结果。 jqlite 似乎不支持 .find('select,input') 这样的调用。我总是得到一个空数组。此外,由于它 returns 个对象,我不能只连接它们。我可能会因此而受到打击,但我求助于你,Whosebug。
var myApp = angular.module('myApp',[]);
myApp.directive('disableContents', function() {
return {
compile: function(tElem, tAttrs) {
var inputs = tElem.find('input');
var selects = tElem.find('select');
var formItems = SOMETHINGTOJOINTHESTUFFABOVE
angular.forEach(formItems, function(el){
...
这是我到目前为止的想法,但是让我讨厌有多个 foreach 语句。
'use strict';
angular.module('induction').directive('sttiDisabled', function() {
return {
compile: function(tElem, tAttrs) {
var inputs = tElem.find('input');
var selects = tElem.find('select');
var applyDisable = function(el) {
el = angular.element(el);
var prevVal = el.attr('ng-disabled');
prevVal = prevVal? prevVal + ' || ': '';
prevVal += tAttrs['sttiDisabled'];
el.attr('ng-disabled', prevVal);
}
angular.forEach(inputs, function(el){
applyDisable(el);
});
angular.forEach(selects, function(el){
applyDisable(el);
});
}
}
});
要么我没有完全理解问题,要么解决方案是:
var formItems = inputs.concat(selects);
如果您在 angular.js 文件之前引用了 jQuery,您将得到一个 jQuery 对象而不是 jQLite。还要记住 jQLite 是 "Limited to lookups by tag name"。
jqLite
(angular.element) indeed doesn't support complex selectors so you will have to first select all you need with querySelectorAll 然后用 angular.element
实例包装这个集合:
var formControls = angular.element(tElem[0].querySelectorAll('input, select'));
我正在研究一个指令,该指令将基于 rootScope 变量禁用页面上的所有表单元素(类似于手动向每个项目添加 ng-disabled,但只是一种更方便的方法。我正在修改一个现有的应用程序,不想挖掘一堆模板)
我需要能够连接多个 jqlite .find() 语句的结果。 jqlite 似乎不支持 .find('select,input') 这样的调用。我总是得到一个空数组。此外,由于它 returns 个对象,我不能只连接它们。我可能会因此而受到打击,但我求助于你,Whosebug。
var myApp = angular.module('myApp',[]);
myApp.directive('disableContents', function() {
return {
compile: function(tElem, tAttrs) {
var inputs = tElem.find('input');
var selects = tElem.find('select');
var formItems = SOMETHINGTOJOINTHESTUFFABOVE
angular.forEach(formItems, function(el){
...
这是我到目前为止的想法,但是让我讨厌有多个 foreach 语句。
'use strict';
angular.module('induction').directive('sttiDisabled', function() {
return {
compile: function(tElem, tAttrs) {
var inputs = tElem.find('input');
var selects = tElem.find('select');
var applyDisable = function(el) {
el = angular.element(el);
var prevVal = el.attr('ng-disabled');
prevVal = prevVal? prevVal + ' || ': '';
prevVal += tAttrs['sttiDisabled'];
el.attr('ng-disabled', prevVal);
}
angular.forEach(inputs, function(el){
applyDisable(el);
});
angular.forEach(selects, function(el){
applyDisable(el);
});
}
}
});
要么我没有完全理解问题,要么解决方案是:
var formItems = inputs.concat(selects);
如果您在 angular.js 文件之前引用了 jQuery,您将得到一个 jQuery 对象而不是 jQLite。还要记住 jQLite 是 "Limited to lookups by tag name"。
jqLite
(angular.element) indeed doesn't support complex selectors so you will have to first select all you need with querySelectorAll 然后用 angular.element
实例包装这个集合:
var formControls = angular.element(tElem[0].querySelectorAll('input, select'));