Javascript 检查AngularJs指令中是否存在属性
可以检查指令中是否存在给定的属性,理想情况下使用隔离范围或在最坏情况下使用attributes对象 对于类似于此的指令,我希望有条件地呈现一个状态图标,但仅当status属性存在时Javascript 检查AngularJs指令中是否存在属性,javascript,angularjs,angularjs-directive,angularjs-scope,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,可以检查指令中是否存在给定的属性,理想情况下使用隔离范围或在最坏情况下使用attributes对象 对于类似于此的指令,我希望有条件地呈现一个状态图标,但仅当status属性存在时 return { restrict: 'AE', scope: { status: '@' }, link: function(scope, element, attrs) { scope.status === 'undefined' } } 理想情况下,它将直接绑定到范围,以便
return {
restrict: 'AE',
scope: {
status: '@'
},
link: function(scope, element, attrs) {
scope.status === 'undefined'
}
}
理想情况下,它将直接绑定到范围,以便可以在模板中使用。但是,绑定变量的值是未定义的。这同样适用于&
只读和=
双向绑定
我知道,通过添加
,可以轻松解决这个问题,但对于我将经常使用的指令,我宁愿不必这样做。(XHTML有效性不是一个问题)。执行所需操作的方法是查看链接函数中的属性对象:
link:
function(scope, element, attrs) {
if("status" in attrs)
//do something
}
这样做的方法是检查link函数的attrs参数中是否存在属性,并将其分配给指令隔离范围内的变量
scope:{},
link: function(scope, element, attrs){
scope.status = 'status' in attrs;
},
这应该可以工作,而不必在链接函数中使用if语句。因为
attrs
值是javascript对象的类型。要检查属性是否存在,我们还可以在
关键字中使用hasOwnProperty()
方法
因此,它可能是:
link: function(scope, element, attrs) {
var is_key_exist = attrs.hasOwnProperty('status');//Will return true if exist
}
您可以进一步阅读
关键字中的与hasOwnProperty()
方法之间的差异,在使用angular 1.5+组件时,要检查属性,您可以使用$postLink lifecycle挂钩和$element服务,如下所示:
constructor(private $element) {}
$postLink() {
if(!this.$element.attr('attr-name')){
// do something
}
}
我知道您提到了它,但我只是想知道-您是否尝试过类似attrs中的“status”之类的方法,并查看该评估是什么?是否将“@”单向文本绑定传递给指令?因此scope.status应该是读取“true”的文本,只要将变量作为
传递到指令中,当您将scope指定为如上所述的对象时,该指令将创建一个新的隔离作用域,它不会继承父作用域的属性。改为使用scope:true创建新的作用域(具有对父作用域属性的访问权限),或使用scope:false使指令使用父作用域。这就是你要问的吗?我不太明白你的问题…而且链接函数中的代码只是一个布尔表达式。您的意思是要将其包含在IF语句中吗?scope.status===“未定义”