我正在使用AngularJS,并且想添加一个用于显示图像的灯箱。我的灯箱代码如下所示(我正在使用shadowbox):

<a href="myimage.jpg" rel="shadowbox">image name</a>


但是当我想将影子框与AngularJS一起使用时:

<a ng-repeat="pic in pics" href="{{pic}}" rel="shadowbox">image name</a>


阴影框将被忽略,其工作方式类似于普通链接。
使这项工作最好的方法是什么?

我可能必须编写一条指令,但是我对它不熟悉。

最佳答案

我认为shadowbox只处理一次DOM,并且不会注册AngularJS的DOM修改。

通常的方法是编写一个包装器指令来实例化Shadowbox。建议您直接调用Shadowbox,而不要使用具有rel="shadowbox"属性的自动设置。基本上有两个步骤:


为Shadowbox设置directive
在指令的范围内注册一个函数,该函数在单击链接时将被调用。阅读Shadowbox documentationAPI documentation上的操作方法。


指令原型:

angular.module('yourModuleName') // you can use your own name here
.directive('shadowbox', function() {
  return {
    // here you can style the link/thumbnail/etc.
    template: '<a ng-click="openShadowbox()">{{imageName}}</a>',
    scope: {
      imageName: '@name',
      imageUrl: '@url'
    },
    link: function (scope, element, attrs) {

      // the function that is called from the template:
      scope.openShadowbox = function () {

        // see Shadowbox documentation on what to write here.
        // Example from the documentation:

        Shadowbox.open({
          content:    '<div id="welcome-msg">Welcome to my website!</div>',
          player:     "html",
          title:      "Welcome",
          height:     350,
          width:      350
        });
      };

    }
  };
});


用法:

<a shadowbox name="image name" url="image url"></a>

关于javascript - 在AngularJS中使用外部库(灯箱),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21335230/

10-10 07:12