如何将视图中的模型数据解析为Angular中的javascript函数

时间:2014-05-29 16:25:20

标签: angularjs

假设我有以下内容:

<button ng-repeat="{{item in items}}" ng-click="{{item.name}}Function()">{{item.name}}</button>

我需要能够根据item.name(例如

)动态更改ng-click
firstItemFunction()
secondItemFunction()

2 个答案:

答案 0 :(得分:1)

我会移动逻辑来确定调用你的javascript的函数。

HTML

<button ng-repeat="{{item in items}}" ng-click="figureOutFunction(item)">{{item.name}}</button>

javascript

$scope.figureOutFunction(item){
    if(item.name == "firstItem"){
        firstItemFunction();
    }
    else if(item.name == "secondItem"){
        secondItemFunction();
    }
};

修改

如果您想避免切换,可以这样做:

HTML

<button ng-repeat="{{item in items}}" ng-click="item.action()">{{item.name}}</button>

的javascript

var firstItemFunction = function(){
    ...
};
var secondItemFunction = function(){
    ...
};

$scope.items = [{
  name: 'firstItem',
  action: firstItemFunction
}, {
  name: 'secondItem',
  action: secondItemFunction
}];

我会避免创建调用其他人的不必要的函数。

答案 1 :(得分:1)

如果$scope引用了这些函数:

$scope.items = 
[
  { name: 'firstItemFunction' },
  { name: 'secondItemFunction' }
];

$scope.firstItemFunction = function () {
  console.log('firstItemFunction');
};

$scope.secondItemFunction = function () {
  console.log('secondItemFunction');
};

HTML:

<button ng-repeat="item in items" ng-click="this[item.name]()">
  {{item.name}}
</button>

演示: http://plnkr.co/edit/FSrGumlZqm4Rdku6I3X5?p=preview

可替换地:

$scope.items = [{
  name: 'firstItemFunction'
}, {
  name: 'secondItemFunction'
}];

$scope.firstItemFunction = function() {
  console.log('firstItemFunction');
}

$scope.secondItemFunction = function() {
  console.log('secondItemFunction');
}

$scope.execute = function(action) {
  $scope[action]();
};

<button ng-repeat="item in items" ng-click="execute(item.name)">
  {{item.name}}
</button>

演示: http://plnkr.co/edit/6jATpgEAvFgTFXbvQ6IE?p=preview

如果全局定义了函数,请使用上面的HTML,注入$window和:

$scope.items = [{
  name: 'firstItemFunction'
}, {
  name: 'secondItemFunction'
}];

$scope.execute = function(action) {
  $window[action]();
};

演示: http://plnkr.co/edit/TinMbmvMTIQS4vptQMYf?p=preview