Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查AngularJs指令中是否存在属性_Javascript_Angularjs_Angularjs Directive_Angularjs Scope - Fatal编程技术网

Javascript 检查AngularJs指令中是否存在属性

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' } } 理想情况下,它将直接绑定到范围,以便

可以检查指令中是否存在给定的属性,理想情况下使用隔离范围或在最坏情况下使用attributes对象

对于类似于此的指令,我希望有条件地呈现一个状态图标,但仅当status属性存在时

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===“未定义”