1

我正在尝试为 AngularJS 编写一个 imgix 指令。这是我的代码:

MetronicApp
.directive('imgix', function() {
    return {
        replace: true,
        scope: {
            url: '='
        },
        restrict: "A",
        template: "<img class='thumbnail inline' width={{w}} height={{h}} src='https://mysite.imgix.net/{{url}}?h={{h}}&w={{w}}&fit=crop'>",
        link: function(scope, elm, attrs) {
            function ctrl(value, mode) {
                // check inputs
                if ((value === null) || (value === undefined) || (value === '')) {
                    // let's do nothing if the value comes in empty, null or undefined
                    return;
                }

                scope.h = attrs.height || 50;
                scope.w = attrs.width || 50;
                scope.url = value;


            }

            // by default the values will come in as undefined so we need to setup a
            // watch to notify us when the value changes
            scope.$watch(attrs.url, function(value) {
                ctrl(value, 'url');
            });
        }
    };
});

在 html 中,我有 2 张图片:

 <img imgix data-height="200" data-width="200" url="theme.options.homepageBackground" />

 <img imgix data-height="200" data-width="200" url="theme.options.menuBackground" />

但结果如图所示:

在此处输入图像描述

我不明白出了什么问题。有什么关于范围的吗?

4

3 回答 3

1

我建议使用 ng-src 属性并将整个 url 从链接函数传递给指令。

于 2015-11-25T09:07:54.307 回答
1

您的指令范围绑定到父范围。请改用子范围或隔离范围。

MetronicApp.directive('imgix', function() { return { scope: { url: '=' }

于 2015-11-25T09:18:34.793 回答
0

我用 Matthias 和 Julien 的组合解决了这个问题

首先,我在指令中添加了大括号:

<imgix data-height="200" data-width="200" url="{{theme.options.menuBackground}}" />

然后我将 scope: {} 添加到指令代码中

我看到手表代码中的值返回未定义。我改变了:

scope.$watch(attrs.url, function(value) {
                ctrl(attrs.url, 'url');
            });

现在它起作用了。谢谢你。

于 2015-11-25T09:53:21.583 回答