![](/img/trans.png)
[英]AngularJS directive - passing function as argument to “&” attribute
[英]Passing though an attribute in an Angularjs directive
我正在工作的指令只是freebase搜索窗口小部件(jquery)的包装。 这是我尝试制定的第一个指令,但遇到了一些问题。
所需的功能:1.能够传递语言(两个字母的代码)以显示搜索结果作为属性2.能够指定在选择项目时要调用的功能(通过选择中的数据进行传递)
我在这里用指令设置了一个plunkr 。 第二点功能工作正常,但是我在语言要求方面遇到了麻烦,我不确定为什么。
静态执行语言代码(不插值)时,可以很好地传递语言代码:
if(attrs.lang){
language = attrs.lang;
}
但是当尝试传递这样的值时,我似乎无法使其工作:
attrs.$observe('lang', function(value) {
if(value === ""){
language = 'en';
} else {
console.log("lang val " + value);
language = value;
}
});
知道为什么这行不通吗? 任何意见,将不胜感激。
目前的指令:
directive('suggest', function($http) {
var language;
return {
restrict: 'E',
template: "<input type='text'>",
replace:true,
scope:{
selectData:'=',
onSelect:'&'
},
link: function(scope, element, attrs) {
attrs.$observe('lang', function(value) {
if(value === ""){
language = 'en';
} else {
console.log("lang val " + value);
language = value;
}
});
if(attrs.lang){
language = attrs.lang;
}
$(element).suggest({
"lang": language
})
.bind("fb-select", function(e, info) {
console.log(info);
scope.onSelect({data:info});
console.log("language: " + language);
scope.$apply(function(){
console.log("hello apply here");
scope.selectData = info;
});
});
}
};
});
从您的问题尚不清楚,但我认为您是指以下问题:在插件演示中,我在该语言中键入“ fr”,然后在提示框中输入内容以获取“ en”语言的结果。
这是因为您已经用默认语言(en)初始化了荐插件。 提供给$observe
函数的函数不是在这里调用的-在初始化指令后,稍后会调用它。 因此,更改语言后,您需要重新初始化建议插件。
我不确定执行此操作的正确方法是什么,因为我对该插件不熟悉,但是至少以下更改正在起作用-只需将重新初始化添加到$observe
侦听器即可:
attrs.$observe('lang', function(value) {
console.log("lang val " + value);
language = value;
$(element).suggest({lang: language});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.