解決策はほとんどScottさんが言ったとおりです。コンポーネントの$ evalは動作しません。$ rootScope。$ evalなので、関数eval()を使用し、コントローラでは、カスタム関数を$ rootScopeにバインドしてmenuitemコンポーネントで実行します。 >追加データ-ngのクリック= "$ ctrl.evaluateAction()" コンポーネントのcontroler(menuitem.jsで
<button data-ng-click="$ctrl.evaluateAction()"></button>
2) - menuitem.html(メニュー項目の構成要素)で
1) ) - > menu.htmlで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)(メニューコンポーネント)action属性を追加する追加
<comp-menuitem data-ng-repeat="item in items" action="{{ item.action }}"></comp-menuitem>
4)は、主制御装置では -
angular.module('app')
.controller('MainController', ['$rootScope', '$scope', function($rootScope, $scope){
$rootScope.openDialog = function(key){
if(key === 'open'){
alert("open");
}
};
...
5)アクションはJSONで属性データを追加... $ rootScope.openDialog()などのカスタム機能を追加
{ label : "foo" , action: "$rootScope.openDialog('open')"}
それは動作します!!!!
ありがとうございました!たとえそれがあなたの解決策ではなかったとしても、あなたは私を多く助けました。 –