1

典型的な ng-controller として動作するディレクティブが必要ですが、Promise が解決されたらすぐに呼び出されるようにしたいと考えています。HTML では、これは次のように記述できます。

<div ng-controller="myCtrl" ctrl-promise="p">

p は、親スコープの任意の promise である可能性があります。ルートのコントローラーのインスタンス化を遅らせる方法があることは知っていますが (ここで回答: Angular.js delaying controller initialization )、ルートごとではなくコントローラーごとにこれを指定することをお勧めします。属性として p を指定して ng-if を使用できることはわかっていますが、他の方法はありますか?

4

1 に答える 1

2

それで、約束が解決されるまで、コントローラーがそれを制御することなく、div内のものを存在させたいですか?

プロミスが解決されたときにコントローラーを作成するディレクティブを次に示します。

angular.module('myApp')
.directive('delayController', function($controller, $q) {
  return {
    scope: true,
    link: function(scope, elm, attr) {
      $q.when(scope.$parent.$eval(attr.delayControllerPromise)).then(function() {
        var ctrl = $controller(attr.delayController, {
          $scope: scope
        });
        elm.children().data('$ngControllerController', ctrl);
      });
    }
  };
});

次のように使用できます。

<div delay-controller="MyCtrl" delay-controller-promise="myPromiseExpr()">
</div>
于 2013-09-14T14:55:04.110 に答える