4

我有一个具有不同内容的 ng-switch,其中一个是 Gallery,我必须在 switch ng-switch-when=gallery 内容准备好后将 JQuery 事件设置为所有图像,但并不幸运,因为它在内容已加载。

画廊是第三个 ng-switch-when 所以我不能用 ng-init 设置事件。

那么,ng-switch 是否有内容加载事件或指令?

<a href="" ng-click="menuSelection='gallery';loadLibraryGallery();">GALER&Iacute;A</a>

控制器

$scope.loadLibraryGallery = function(){
//I have to set this event to childrens after ng-switch-when=gallery is loaded
        $('.popup-gallery').magnificPopup();

    };

任何想法。求求你了,谢谢你。

4

2 回答 2

14

您可以在 github 上查看 ngSwitch 指令的源代码 它从不调用任何 $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 的代码。这是指令工作。

于 2013-11-04T23:30:56.583 回答
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>

官方文档 https://docs.angularjs.org/api/ng/directive/ngInit

于 2014-09-23T19:55:37.140 回答