AngularJs 指令不会针对源元素的属性更新进行自我更新
AngularJs Directive don't update itself for source element's attribute updates
几乎尝试了所有方法但没有成功。
我只想在单击 class 名称为 "ion-android-favorite-outline" 的元素时执行操作。
我的源元素如下
<i id="{{product.product_code}}" class="icon ion-android-favorite-outline"></i>
我可以在指令代码中使用 "restrict:'C'" 来完成。
在指令中,完成数据处理后,我将源元素的 class 更改为 "ion-android-favorite",如下所示。
.directive(
"ionAndroidFavoriteOutline",
function(sessionStorageService, productService){
return{
restrict: 'C',
link: function(scope, element, attrs) {
element.bind("click" , function(e){
var productCode = attrs.id;
console.log(attrs.class); // on every click i get class name as 'ion-android-favorite-outline' event though html has class name as 'ion-android-favorite'
if (sessionStorageService.isLoggedIn()) {
productService.trackProduct(productCode).then(function(response){
if (response.data.status == "success") {
element.removeClass("ion-android-favorite-outline").addClass("ion-android-favorite");
} else {
element.removeClass("ion-android-favorite").addClass("ion-android-favorite-outline");
}
});
scope.$apply();
}
我可以看到源元素的 class 名称发生了变化,它在 UI 中的反映也发生了变化。
但是,如果我再次单击源元素(其 class 在之前的单击操作中已更改)仍会调用指令代码。
为什么???
我尝试了 scope.$apply 、 replace: true 等...但没有解决方法。
请帮忙。
您可以使用如下指令:
<i id="{{product.product_code}}" class="ion-android-favorite-outline" ion-android-favorite-outline></i>
.
element.unbind("click");
几乎尝试了所有方法但没有成功。
我只想在单击 class 名称为 "ion-android-favorite-outline" 的元素时执行操作。
我的源元素如下
<i id="{{product.product_code}}" class="icon ion-android-favorite-outline"></i>
我可以在指令代码中使用 "restrict:'C'" 来完成。
在指令中,完成数据处理后,我将源元素的 class 更改为 "ion-android-favorite",如下所示。
.directive(
"ionAndroidFavoriteOutline",
function(sessionStorageService, productService){
return{
restrict: 'C',
link: function(scope, element, attrs) {
element.bind("click" , function(e){
var productCode = attrs.id;
console.log(attrs.class); // on every click i get class name as 'ion-android-favorite-outline' event though html has class name as 'ion-android-favorite'
if (sessionStorageService.isLoggedIn()) {
productService.trackProduct(productCode).then(function(response){
if (response.data.status == "success") {
element.removeClass("ion-android-favorite-outline").addClass("ion-android-favorite");
} else {
element.removeClass("ion-android-favorite").addClass("ion-android-favorite-outline");
}
});
scope.$apply();
}
我可以看到源元素的 class 名称发生了变化,它在 UI 中的反映也发生了变化。
但是,如果我再次单击源元素(其 class 在之前的单击操作中已更改)仍会调用指令代码。
为什么???
我尝试了 scope.$apply 、 replace: true 等...但没有解决方法。
请帮忙。
您可以使用如下指令:
<i id="{{product.product_code}}" class="ion-android-favorite-outline" ion-android-favorite-outline></i>
element.unbind("click");