angular.jsでng-initのような式評価を使う

2014-07-02T00:00:00+00:00 angular.js JavaScript

参考: https://github.com/angular/angular.js/blob/master/src/ng/directive/ngInit.js#L63

angular.jsで

のようにngInit Directiveで指定した式を評価して実行したいようなangular.js Directiveを作りたい場合

index.html

<html ng-app="sample">
  <head>
    <script src="angular.min.js"></script>
    <script src="main.js"></script>
  </head>
  <body>
    <div ng-controller="SampleController">
      <!-- ng-callのDirectiveを作ってクリックイベントを定義したのちに引数で指定されている式を評価する -->
      <div ng-call="say()">click</div>
    </div>
  </body>
</html>

main.js

angular.module("sample", [])
  .directive("ngCall", function() {
    return {
      compile: function() {
        return {
          pre: function(scope, element, attrs) {
            element.bind("click", function() {
              scope.$eval(attrs.ngCall);
            });
          }
        };
      }
    };
  })
  .controller("SampleController", function($scope) {
    $scope.say = function() {
      alert("hoge");
    };
  });

別にpreじゃないといけないわけでも無いと思うので普通にdirectiveから関数返す形でデフォルトなイベントサイクル上でDirectiveを作用させる方式で良いと思いますけど、一応公式同様な感じで

んまぁっていう感じでscope.$eval(評価する式?)のような感じでやれば良いっぽいって事で

scope.$evalで引数を設定する方法 gradle android build systemでjacoco