我正在使用一個指令,它只是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