Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.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 自定义指令作用域与属性_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

Javascript 自定义指令作用域与属性

Javascript 自定义指令作用域与属性,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,在angular中创建自定义指令时,我有一个问题。 当我使用link函数时,我不确定使用attrs或scope访问属性时的真正区别是什么。 以这段代码为例: myApp.directive('someDirective',function(){ 返回{ 限制:'E', 替换:正确, 范围:{ 标题:'=标题' }, 模板:“”, 链接:函数(范围、元素、属性){ if(范围、标题){ //在这里做点什么 } if(属性标题){ //在这里做点什么 } }, } 根据我的观察,从attrs和按

在angular中创建自定义指令时,我有一个问题。 当我使用link函数时,我不确定使用attrs或scope访问属性时的真正区别是什么。 以这段代码为例:

myApp.directive('someDirective',function(){
返回{
限制:'E',
替换:正确,
范围:{
标题:'=标题'
},
模板:“”,
链接:函数(范围、元素、属性){
if(范围、标题){
//在这里做点什么
}
if(属性标题){
//在这里做点什么
}
},
}

根据我的观察,从attrs和按范围访问“title”属性也有类似的效果。真正的区别是什么?

区别在于,根据定义,属性是字符串类型。始终如此。在您的情况下,
attrs.title
实际上是字符串,等于您在HTML中传递到属性的任何内容

但是,
scope.title
被解析并计算属性
attr.title
的结果

如果你在HTML中使用类似的东西

<some-directive title="name"></some-directive>


如果范围中定义了
$scope.name=“Thomas Mann”
,那么
attr.title
将是string
“name”
,而
scope.title
将是
“Thomas Mann”

,请查看这个非常棒的答案。要添加这一点,还可以执行
scope.$eval(attrs.title)
在作用域的上下文中获取属性的解析版本。仅此而已?我认为当您使用@作为绑定作用域时,它也会作为字符串传递,因此它具有相同的效果,对吗?@Marcin86,传递到属性中的内容基本上是字符串,作为作用域变量传递的内容可以是任何数据类型。但您可以lso do
scope.$eval(attrs.title)
在作用域的上下文中计算属性,如我在上面所评论的。
<some-directive title="name"></some-directive>