如何控制角度指令的初始化?

cav*_*a23 10 javascript angularjs angularjs-directive

我有一个用作表单控件的指令.该指令隐藏在模式对话框中,并在用户单击按钮以显示表单时显示.由于此指令连接到某些Web服务,我不希望它初始化,除非用户单击该按钮并显示表单(以防止不必要的Web服务调用).所以,我正在寻找的是父控制器触发指令执行某些初始化代码的好方法.这是一个例子:

App.controller('parentCtrl', ['$scope', function($scope) {
  $scope.onButtonClick = function onButtonClick() {
    // tell directive to init somehow
  };
}]);

App.directive('myDirective', function() {
return {
  restrict: 'E',
  scope: {},
  controller: function($scope, myService) {
    function init() {
      myService.getData().then(function(value) { //do init stuff });
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

假设parentCtrl的模板包含一个标记.

Gab*_*abe 12

在一个标记元素ng-if将阻止指令在需要之前初始化.(scope.loadModal默认情况下应为false)

<my-directive ng-if='loadModal'></mydirective>
Run Code Online (Sandbox Code Playgroud)

注意:scope.loadModal = false显示指令一次后设置将从DOM中卸载指令.将其设置为true将重新加载指令,从而产生另一个http请求.