我有一个包含带有角度对象的DOM元素的自定义指令,我想知道如何定位该对象的值。 这是一个例子:
app.directive('x', function() {
return {
scope: {},
restrict: 'E',
template: '<span class="oinky">{{box.size}}</span>',
link: function(scope, element, attrs) {
if({{box.size}}>50 && {{box.size}}<=65) {
element.css("background", "rgba(255, 216, 61, 0.7)");
}else if({{box.size}}>65 && {{box.size}}<80){
element.css("background", "rgba(235, 149, 51, 0.7)");
}else if({{box.size}}>=80){
element.css("background", "rgba(189, 45, 40, 0.7)");
}else{
element.css("background", "rgba(185, 211, 50, 0.7)");
}
}
};
});
像这样的东西。很抱歉,如果我对框架的了解看起来很生,但我无法在google或StackOverflow上找到任何好的答案。
感谢您的帮助!
答案 0 :(得分:1)
您缺少的是该指令的用户如何设置box.size
的值。您已使用scope:{}
声明创建了一个隔离范围,因此目前无法将box.size
设置为任何内容。
假设您希望将此作为一个独立的组件(即不从父作用域读取),您可以在指令作用域上设置boxsize
并在使用该指令时由用户设置:
app.directive('x', function() {
return {
scope: {
boxSize:"=size"
},
restrict: 'E',
template: '<span class="oinky">{{boxSize}}</span>',
link: function(scope, element, attrs) {
if(scope.boxSize>50 && scope.boxSize<=65) {
element.css("background", "rgba(255, 216, 61, 0.7)");
} else if(scope.boxSize>65 && scope.boxSize<80){
element.css("background", "rgba(235, 149, 51, 0.7)");
} else if(scope.boxSize>=80){
element.css("background", "rgba(189, 45, 40, 0.7)");
} else{
element.css("background", "rgba(185, 211, 50, 0.7)");
}
}
};
});
然后可以使用:
<x size="55"/>
有关带有指令的范围的更多信息,请查看$compile
的文档,这是指令信息的最佳位置:(https://docs.angularjs.org/api/ng/service/ $ compile
更新:使用父范围
要使用父作用域,只需删除scope: {}
部分即可。这将意味着scope
函数的link
参数将是父函数的参数。
类似的东西:
app.directive('x', function() {
return {
restrict: 'E',
template: '<span class="oinky">{{box.size}}</span>',
link: function(scope, element, attrs) {
if(scope.box.size>50 && scope.box.size<=65) {
element.css("background", "rgba(255, 216, 61, 0.7)");
} else if(scope.box.size>65 && scope.box.size<80){
element.css("background", "rgba(235, 149, 51, 0.7)");
} else if(scope.box.size>=80){
element.css("background", "rgba(189, 45, 40, 0.7)");
} else{
element.css("background", "rgba(185, 211, 50, 0.7)");
}
}
};
});
假设父作用域具有box
属性size
的对象。