2013-10-29 70 views
13

我正在爲我正在使用的網站使用bootstrap-angular-ui-modal。我用來打開模式的代碼加載時的自舉角度UI模式

$modal.open(
    { 
     templateUrl: '/home/template', 
     controller: myCtrl, 
     resolve: { 
      data: function() { 
       return data; 
      } 
     } 
    }); 

一切工作正常。但我需要找到一種方式來加載模式後執行一些代碼。我嘗試了不同的東西,但不能讓它們工作。有些事情我試過

在模板我做

<script> 
    document.onload = function() { 
     console.log('opened'); 
    }; 
</script> 

我還發現有名爲openned角模態對象的承諾。我試圖

modalInstance.opened.then(function(){console.log('hello')}); 

也無法正常工作。我可以在這裏使用一些幫助。

回答

6

這絕對不是一個很好的解決方案,但在至少爲我工作。我只是增加了一個暫停執行所需要的功能之前,

modalInstance.opened.then(
    $timeout(function() { 
      console.log('hello'); 
     }, delay)); 
5

UI-bootstraps模態具有result解決方案。

「打開」 - 當一個模式被後 下載內容的模板打開,解決所有變量

使用NG-init,可以解決一個承諾。您的模板文件中創建一個div:

<div ng-init="func()"></div> 
+6

試圖'opened'承諾。在加載模式之前調用。這就是爲什麼jQuery的綁定代碼無法正常工作。以及關於ng-init - 「ngInit的唯一合適的用法,用於對ngRepeat的特殊屬性進行別名,如下面的演示所示。除此之外,您應該使用控制器而不是ngInit初始化示波器上的值。「 – Muctadir

+0

以及如何告訴控制器初始化創建?這是這裏的問題。爲什麼ng-init =「mycontroller.init()」是邪惡的? – amdev

1

如果你想要加載DOM後做一些事情,這是最好做那種事情了一項指令中。在這裏看到:http://docs.angularjs.org/guide/directive#creating-a-directive-that-manipulates-the-dom

你可以與你的指令屬性標記您的模態的身體(或模式裏面的東西),然後創建指令就像這樣:

App.directive('myDirective', function($timeout) { 
     function link(scope, element, attrs) { 
      $timeout(function() { 
       // stuff to do after DOM load here 
      }); 
     } 

     return { 
      link: link 
     }; 
    }); 
+0

這似乎不適用於$ modalInstance控制器 – Kirby

+0

哪部分不工作?它在哪裏爲你打破? – jdmcnair

3

Since version 0.13.0,有一個rendered承諾就可以使用。

rendered(型號:promise - 當一個模式被渲染得到解決。

實施例:

this.modalInstance.rendered.then(function() { 
    console.log("modal is rendered"); 
});