2015-06-09 15 views
7

Tôi muốn khởi chạy mã nếu mọi phương thức mở ra. Thông thường tôi muốn một cái gì đó như:Angular-ui: Có phương thức nào được mở không?

$scope.$watch(function() { 
      return $modal.isOpenState; 
     }, function (val) { 
      //my code here 
     }, true 
    ); 

Nhưng tôi không biết phải xem gì. Có, tôi có thể phát hiện sự kiện mở cho từng trường hợp, như:

modalInstance.opened.then(function() { 
    //my code here 
}); 

Nhưng điều này không hề khô.

P.S. Ngoài ra tôi có thể làm một cái gì đó giống như $('.modal').hasClass('in') trong $watch chức năng, nhưng đây là một chút xấu xí

PPS Và btw Tôi đang sử dụng ui-router để mở modals (xem faq here)

$modal.open({ 
     templateUrl: "...", 
     resolve: {... }, 
     controller: function($scope) { ... } 
    }).result.finally(function() { 
     //can put code here, but same issue 
    }); 
+0

gì mã/chỉ thị bạn sử dụng cho hoạt động modals của bạn? có thể cung cấp một cái nhìn tốt hơn về cách $ xem chúng một cách chính xác – shershen

+0

Thực ra tôi đang sử dụng ui-router và các mod thức mở như trong faq này (https://github.com/angular-ui/ui-router/wiki/Frequently- Các câu hỏi được hỏi # cách mở-một-hộp-thoại-ở-một-trạng thái nhất định) –

Trả lời

5

Có sử dụng phương thức giao diện người dùng dịch vụ nội bộ được gọi là $modalStack. Dịch vụ này được sử dụng bởi $modal và có phương thức được gọi là getTop để truy xuất phiên bản phương thức hiện đang mở. Vì vậy, bạn có thể tiêm dịch vụ này và chỉ cần xem kết quả getTop trên $rootScope. Ví dụ:

app.run(function($rootScope, $modalStack) { 
    $rootScope.$watch($modalStack.getTop, function(newVal, oldVal) { 
     if (newVal) { 
      console.log('opened', newVal, oldVal); 
     } 
    }); 
}); 

Demo:http://plnkr.co/edit/ZVD0cryL0qXNGl9UPMxB?p=preview

+0

Điều này thật xuất sắc, cảm ơn rất nhiều =) –

+0

Không vấn đề gì, vui mừng đã giúp! – dfsq

Các vấn đề liên quan