我有以下指令:
template: '<div data-div="outer"><div data-div="inner"></div></div>',
link: function postLink(scope, elem, attrs) {
var outer = elem.find('[data-div="outer"]');
var inner = elem.find('[data-div="inner"]');
outer.css({
'background': 'red',
'width': "100%",
'height': "100%",
});
inner.css({
'background': 'blue',
'width': "50%",
'height': "100%",
});
}
基于this post,我尝试了这些选择器。但我使用的是jQLite,而不是JQuery。
那么,如何根据数据属性值查找元素?
答案 0 :(得分:5)
使用jqLite时,您可以使用querySelector()
(或querySelectorAll()
作为倍数)来获得类似的find()
行为...
function postLink(scope, elem, attrs) {
var outer = angular.element(elem[0].querySelector('[data-div="outer"]'));
var inner = angular.element(elem[0].querySelector('[data-div="inner"]'));
outer.css({
'background': 'red',
'width': "100%",
'height': "100%",
});
inner.css({
'background': 'blue',
'width': "50%",
'height': "100%",
});
}
答案 1 :(得分:0)
在angular中,你很少需要使用jQuery选择器来查找元素。 Angular将遍历DOM树并为您找到指令。
您所要做的就是实施指令:
app.directive('div', function() {
return {
restrict: 'A',
link: function(scope, element, attr) {
if(attr.div == 'outer') {
element.css({
'background': 'red',
'width': "100%",
'height': "100%",
});
}
if(attr.div == 'inner') {
element.css({
'background': 'blue',
'width': "50%",
'height': "100%",
});
}
}
}
});
如果您需要与父指令进一步交互,angular也可以轻松完成。您只需在指令定义中包含 require 属性,并将父控制器作为第4个参数注入到您的子指令的链接函数中:
app.directive ('parent', function() {
return {
...
controller: function($scope, $element, $attrs) {
function doSomething() {
}
}
}
});
app.directive('child, function() {
return {
restrict: 'A',
require: '^parent', // child directive requires a parent directive
link: function(scope, element, attr, parentController) {
// access to the parent controller
parentController.doSomething();
}
}
});