[英]how to assign array element value to ng-click in angular js
在我的程序中,我有一个由标头名称和函数名称组成的Array
。 我在由span
标记组成的div
使用ng-repeat
。 我想为每个迭代范围添加不同的功能,所以我将函数名称存储在数组中。 我的html代码是:
<div ng-repeat="header in header" ng-init="head=header">
<h4 class="headers">{{ header.name}}</h4>
<div class="arrow-up" ng-show={{ header.arrowup}} ng-click={{header.close}}> </div>
</div>
我的角度代码是:
$scope.header=[{"name":"Subsection Header #1","arrowup":"arrowup","close":"close()"}];
$scope.close = function() {
console.log(hello);
};
我想将close()分配给ng-click,将arrowup分配给ng-show。 如何将它们分配给ng-click
和ng-show
更改:
<div class="arrow-up" ng-show={{ header.arrowup}} ng-click={{header.close}}>
至:
<div class="arrow-up" ng-show="header.arrowup" ng-click="this[header.close]()">
<button>
CLOSE ME
</button>
</div>
ng-click是我所看到的问题,
<div class="arrow-up" ng-show="header.arrowup" ng-click="header.close"></div>
我们无需为ng-click和ng-show赋予{{}}。
希望能帮助到你。
首先,您需要将一个实函数传递给数组:
function arrowUp(){
// ng-show needs to receive true or false
return true;
}
function close(){
// do something here
}
$scope.headers=[{"name":"Subsection Header #1","arrowup":arrowUp,"close":close}];
将它们绑定在一个视图中:
<div ng-repeat="header in headers">
<h4 class="header">{{ header.name}}</h4>
<div class="arrow-up" ng-show="header.arrowup()" ng-click="header.close()"> </div>
</div>
您需要使用$eval
方法,您可以在此处了解更多信息
$ scope。$ eval在当前作用域上执行表达式并返回结果。 表达式中的任何异常都会传播(未捕获)。 这在评估Angular表达式时很有用
HTML:
<div ng-controller="TestController">
<div ng-repeat="header in headers">
<h4>{{ header.name}}</h4>
<button type="button" ng-click="onExecuteFunctionFromString(header.close)">Click Here</button>
</div>
</div>
JS:
var myApp = angular.module('myApp', []);
myApp.controller('TestController', ['$scope', function($scope) {
$scope.headers = [{
"name": "Subsection Header #1",
"arrowup": "arrowup",
"close": "close()"
}];
$scope.close = function() {
console.log('hello');
};
$scope.onExecuteFunctionFromString = function(stringFunction) {
$scope.$eval(stringFunction)
};
}]);
请在这里查看工作示例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.