我正在使用一个指令,它只是freebase搜索小部件(jquery)的一个包装。这是我尝试制作的第一个指令,我遇到了一些问题。在Angularjs指令中传递属性
期望的功能: 1.在语言(二字母代码)以供显示的搜索结果通过作为属性指定一个函数 2.能力的能力时,选择的项目(通过从选择数据传递)
被称为我设置了a plunkr with the directive here。第二个功能工作得很好,但我遇到了语言要求的麻烦,我不知道为什么。
在语言代码静态传递时做它工作正常(不插值):
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;
});
});
}
};
});
这是完美的。非常感谢您的帮助GRaAL。我并没有将提示代码识别为初始化,并且认为它每次都运行。非常感激! :) – bornytm
不,对于具有该指令的每个元素,都会调用一次'link'方法。使用事件监听器,'$ observe'或'$ watch'来对事件或变化做出反应。 – GRaAL