1

サイト メニューが JSON ファイルから動的に読み込まれるアプリケーションを作成しています。ng-click各メニューは、ディレクティブ内で定義されるアクションに対応する場合があります。これは次のようになります

<li ng-repeat="menuItem in menuContainer.menus" class="{{menuItem.cssClass}}">        
    <a href="{{menuItem.url}}" ng-click="{{menuItem.clickAction}}">    
    <i class="{{menuItem.iconClass}}"></i>{{menuItem.name}}

<span class="badge">{{menuItem.subMenus.length}}</span>
    </a>`enter code here`
<li>

問題は、 を関数としてng-click認識しないclickActionことです。これは、リンク プロセスが原因であると考えられます。文字列をメソッドに評価する方法があることを知りたいです。私はやろうとし$evalましたが、ロード時に関数を実行します。

どうすればいいですか?

4

1 に答える 1

2

メソッドを文字列ではなく関数として定義し、 に置き換えng-click="{{menuItem.clickAction}}"ますng-click="menuItem.clickAction()"。次のように、$scope で関数を定義する別の方法:

$scope.executeString = function(body){
  eval(body);
};

ng-click を に置き換えますng-click="executeString(menuItem.clickAction)"。とにかく、使用 eval はアンチパターンです;)

ng-clickそのようなディレクティブやその他のディレクティブは、角度式をパラメーターとして受け取ることを忘れないでください。そして、式の本体がa = b + c角度よりも大きい場合は、JavaScriptのように変換します$scope.a = $scope.b + $scope.c

于 2013-10-05T21:12:36.937 に答える