我有一个具有不同内容的ng-switch,其中一个是Gallery,我必须在切换ng-switch-when = gallery内容准备好之后将JQuery事件设置为所有图像,但不幸运,因为它触发了加载内容之前的事件。
图库是第三个ng-switch-when所以我无法使用ng-init设置事件。
那么,ng-switch是否有内容加载的事件或指令?
<a href="" ng-click="menuSelection='gallery';loadLibraryGallery();">GALERÍA</a>
控制器
$scope.loadLibraryGallery = function(){
//I have to set this event to childrens after ng-switch-when=gallery is loaded
$('.popup-gallery').magnificPopup();
};
任何想法。请 谢谢。
答案 0 :(得分:14)
您可以查看ngSwitch指令的source on github 它从不调用任何$ broadcast或$ emit函数,所以不,它没有这样的事件。
您可以尝试创建自己的指令,这非常简单。在插入html代码后,该指令将被链接。
让我们说这是你的代码:
HTML:
<ANY ng-switch="expression">
<ANY ng-switch-when="matchValue1" data-gallery>...</ANY>
<ANY ng-switch-when="matchValue2">...</ANY>
<ANY ng-switch-default>...</ANY>
</ANY>
JS:
angular.module('app').directive('gallery', function(){
return function ($scope, $element, attrs) {
$element.find('.popup-gallery').magnificPopup();
}
});
请记住,您永远不应该修改DOM或调用从控制器修改DOM的代码。这是指令工作。
答案 1 :(得分:2)
您也可以使用函数data-ng-init,它在切换之前初始化指定的数据。
看起来像:
<ANY ng-switch="expression">
<ANY ng-switch-when="matchValue1" data-ng-init="loadLibraryGallery()">...</ANY>
<ANY ng-switch-when="matchValue2">...</ANY>
<ANY ng-switch-default>...</ANY>
</ANY>