gpt4 book ai didi

angularjs - 将指令内的 ng-click 数据传递到 Controller 中的函数中

转载 作者:行者123 更新时间:2023-12-02 22:41:37 26 4
gpt4 key购买 nike

我发现这个问题几乎让我到达了我需要去的地方。 Why doesn't ng-click work in my directive and how do I add a toggle class?

这使得我在指令模板中单击 ng 会触发 Controller 中的一个函数。 http://plnkr.co/edit/GorcZZppa8qcIKbQAg2v?p=preview

问题是返回到我的 Controller (项目)的参数未定义。我需要它实际从指令中的变量传递数据,以便在我将在 Controller 中运行的函数中使用。

指令模板文件

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

<span class="tsProductAttribute-image">
<img ng-src="{{variantImage}}">
</span>
<span class="tsProductAttribute-desc">{{item.productName}}</span>
<select ng-model="variantImage">
<option ng-repeat="variant in item.variants" value="{{variant.image}}">{{variant.name}} - {{variant.listprice.amount}}</option>
</select>
<span class="tsProductAttribute-price">{{item.variants[0].listprice.amount}} {{item.variants[0].listprice.entity}}</span>
</div>

指令

angular.module('msfApp')
.directive('listitem', function () {
return {
templateUrl: 'assets/templates/directives/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);
}
}
}
});

指令实现

<listitem item="item" item-click="toggleInBasket(item)"></listitem>

Controller 中的功能

$scope.toggleInBasket = function(item) {
$scope.basket.toggle(item);

console.log(basket.get());

}

(项目)未定义

最佳答案

将函数传递到指令隔离范围时,您应该使用 &(表达式绑定(bind))来传递方法引用。在 item-click 上,您应该提到对 Controller 方法的实际调用,例如 toggleInBasket(item)

标记

<listitem item="item" item-click="toggleInBasket(item)"></listitem>

然后,在从指令调用方法时,您应该将其称为 scope.itemClick({item: item})

指令

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

Demo here

关于angularjs - 将指令内的 ng-click 数据传递到 Controller 中的函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36209664/

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