解决方案几乎就像斯科特所说的那样。组件中的 $eval 不起作用,甚至 $rootScope.$eval 所以我使用了函数 eval() 并在控制器中将我的自定义函数绑定到 $rootScope 以在 menuitem 组件中执行。
1) 在 menuitem.html (menuitem 组件) -> 添加data-ng-click="$ctrl.evaluateAction()"
<button data-ng-click="$ctrl.evaluateAction()"></button>
2)在组件控制器(menuitem.js)->添加evaluateAction()
function menuitemController($rootScope, $scope, $element, $attrs) {
var ctrl = this;
...
ctrl.evaluateAction = function(){
eval(ctrl.action);
}
}
angular.module('app')
.component('appMenuitem', {
transclude: false,
controller: menuitemController,
bindings :{
label : '@',
...
action: '@'
},
templateUrl: 'angular/components/menuitem/menuitem.html'
});
3)在menu.html(菜单组件)中添加action属性
<comp-menuitem data-ng-repeat="item in items" action="{{ item.action }}"></comp-menuitem>
4) 在主控制器中 - 将自定义函数添加为$rootScope.openDialog()...
angular.module('app')
.controller('MainController', ['$rootScope', '$scope', function($rootScope, $scope){
$rootScope.openDialog = function(key){
if(key === 'open'){
alert("open");
}
};
...
5)在JSON中添加动作属性数据
{ label : "foo" , action: "$rootScope.openDialog('open')"}
它有效!!!!