AngularJS-如何从链接函数访问隔离范围?

AngularJS-如何从链接函数访问隔离范围?,angularjs,angularjs-directive,Angularjs,Angularjs Directive,考虑以下指令示例: app.directive('phone',function(){ 返回{ 限制:'E', 范围:{ 电话:'@' }, 模板:“{{tel}}”, 链接:函数(范围、元素、属性){ console.log(scope.tel);//未定义 } }; }); 它是这样使用的: <phone tel="1234"></phone> tel可在模板中访问,但在链接功能中它是未定义的。为什么?如何从链接函数访问隔离作用域?在链接函数完成之前,它

考虑以下指令示例:

app.directive('phone',function(){
返回{
限制:'E',
范围:{
电话:'@'
}, 
模板:“{{tel}}”,
链接:函数(范围、元素、属性){
console.log(scope.tel);//未定义
}
};
});  
它是这样使用的:

<phone tel="1234"></phone>


tel
可在模板中访问,但在链接功能中它是
未定义的
。为什么?如何从链接函数访问隔离作用域?

在链接函数完成之前,它不会被插值(我不知道为什么会这样),但您有两个选项:

app.directive('phone',函数($timeout,$interpolate){
返回{
限制:'E',
范围:{
电话:'@'
}, 
模板:“{{tel}}”,
链接:函数(范围、元素、属性){
//使用$timeout服务,无延迟:
$timeout(函数(){
console.log(scope.tel);//1234
});
//使用$watch-每次值更改时都会调用:
范围:$watch('tel',功能(tel){
console.log(scope.tel);//1234
});
//您甚至可以使用$intrapolate服务,这基本上就是“@”所做的:
log($interpolate(element.attr('tel'))(scope.parent));
//在您的示例中,tel不是一个表达式,而是一个常量,因此您也可以这样做:
console.log(attrs.tel);//1234
}
};
});  

因为@isolate scope只能传递字符串,所以您唯一的选择是

console.log(attrs.tel)


“@local scope属性用于访问指令外部定义的字符串值”

看起来您在这里做的一切都是正确的。我在属性中输入的值是从Ajax请求获得的,在调用console.log时,
link
中的值是
未定义的,我遇到了类似的问题。但这显然不是你的情况。至少你可以使用
tel:'='
<phone tel="1234"></phone>