在angularJS中触发没有按钮单击的模态

时间:2017-05-05 16:14:55

标签: javascript jquery angularjs bootstrap-modal

我有一个简单的模态,在显示类似..

的消息的条件下触发

HTML:

<div ng-if="getGuestModal()"></div>

控制器:

  $scope.guestIndicator = function () {
    return true;
  };

  $scope.guestModal = function() {
        $modal.open({
          animation: true,
          controller: guestModalController
          templateUrl: "./guestModal.html"
        });
    };

  $scope.getGuestModal = function () {
    if ($scope.guestIndicator()) {
      $scope.guestModal ();
    }
  };

遇到错误,上面写着“Uncaught Error:[$ rootScope:infdig] 10 $ digest()迭代次数。中止!”

任何想法?

1 个答案:

答案 0 :(得分:1)

也许只是减少一些代码复杂性将解决这个问题......

<div ng-if="getGuestModal()"></div>

在div中你有一个将在页面加载时运行的函数。该函数返回未定义 falsy ,因此 ng-if 值将为&#34; false&#34; ;从来没有。

如果您希望功能 getGuestModal 在页面加载时触发,就像使用ng-if一样,那么也许在您的控制器中你可以这样做...

// Controller...

if(guestIndicator()){
  $scope.guestModal();
}

我猜你的 div 你的实际 HTML for modal,只是你的钩子来激活要触发的功能你的逻辑。

另一种方法是将视图中的 MODAL 连接到自己的自定义指令,例如

<my-modal ng-if="isGuest"></my-modal>

然后在你的控制器中加载像这样的东西......

// Controller...

$scope.isGuest = myLogicFunctionThatReturnsABoolean();
  

在自定义指令中......

app.directive("myModal",...

  return {
    restrict: "E",
    boiler plate....
    controller: function($scope){
      $modal.open({
        animation: true,
        controller: guestModalController
        templateUrl: "./guestModal.html"
      });
    }
  }
  

另外要提的是......

一个模态通常在渲染的dom中,即使它没有显示,然后你只需要在逻辑或逻辑或按钮或链接出现时用布尔值调用它。