角度指令控制器 - 等待属性的赋值/评估

时间:2015-05-19 05:19:23

标签: javascript angularjs angularjs-directive

假设我有以下标记:

<input name="username" type="text" ng-model="vm.username" available="{{vm.blarg}}">

我们可以说blarg设置为&#34; foo&#34; (来自页面的控制器 - 而不是来自下面的指令)。

我有以下指令:

  angular.module('app')
    .directive('available', RegistrationCtrl);

  function RegistrationCtrl() {
    var directive = {
      restrict: 'A',
      require: 'ngModel',
      scope: {
        ngModel: '=ngModel'
      },
      link: function(scope, element, attrs, ngModel) {
        console.log("link: " + attrs.available); //output: "foo"
      },
      controller: ExampleController,
      controllerAs: 'vm',
      bindToController: true
    };

    return directive;
  }

  function ExampleController($attrs) {
    console.log("controller:" + $attrs.available); //output: "{{vm.blarg}}"
  }

我的问题:有没有办法使控制器(指令)等到所有属性被角度解析(评估)的那一刻:

{{vm.blarg}} -> "foo"

换句话说,我希望该指令仅在第一个摘要周期结束后才能运行。

1 个答案:

答案 0 :(得分:0)

根据角度文档,最佳做法是:

  

如果要将API公开给其他指令,请使用控制器。   否则使用链接。

在您的指令中,如果没有要公开的API,则不要使用控制器。您的所有逻辑都在链接功能中,您可以在其中查看范围属性以进行更改。