gpt4 book ai didi

javascript - 为什么 ng-click 在我的指令中不起作用以及如何添加切换类?

转载 作者:行者123 更新时间:2023-12-03 16:42:49 26 4
gpt4 key购买 nike

我在 Angular 中创建了一个如下所示的指令:

angular.module('msfApp')
.directive('listitem', function () {
return {
templateUrl: 'assets/templates/directives/listitem.html',
restrict: 'E',
scope: {
'item': '='
}
}
});

模板看起来像这样:

<div class="tsProductAttribute" ng-click="toggleInBasket(item)">
<span class="tsProductAttribute-image">
<img ng-src="{{item.variants[0].image}}">
</span>
<span class="tsProductAttribute-desc">{{item.productName}}</span>
<span class="tsProductAttribute-price">{{item.variants[0].price[0].amount}} {{item.variants[0].price[0].entity}}</span>
</div>

但是现在我有两个问题:

  1. ng-click 函数没有在我的 Controller toggleInBasket(item) 中触发,这是为什么?
  2. 其次,如何向列表项添加切换行为,以便它切换名为“tsProductAttribute--selected”的类

提前谢谢大家!

最佳答案

1) 问题是孤立的范围。您无法在 Controller 范围内看到该功能。一种解决方案是将函数引用传递给指令:

http://plnkr.co/edit/GorcZZppa8qcIKbQAg2v?p=preview

<body ng-controller="ItemController">
<listitem item="item" item-click="toggleInBasket(item)"></listitem>
</body>

在指令中:

scope: {
'item': '=',
'itemClick': '&'
}

在模板中:

<div class="tsProductAttribute" ng-click="itemClick(item)">

2) 在指令中创建另一个函数来切换选定状态并调用 Controller 函数:

angular.module('msfApp').directive('listitem', function () {
return {
templateUrl: 'listitem.html',
restrict: 'E',
scope: {
'item': '=',
'itemClick': '&'
},
link: function(scope, iElement, iAttrs) {
scope.selected = false;
scope.toggleState = function(item) {
scope.selected = !scope.selected;
scope.itemClick(item);
}
}
}
});

并切换模板中的类:

<div class="tsProductAttribute" 
ng-class="{'tsProductAttribute--selected': selected}"
ng-click="toggleState(item)">

关于javascript - 为什么 ng-click 在我的指令中不起作用以及如何添加切换类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17567383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com