让 holder.js 与 Angular 一起工作

Posted

技术标签:

【中文标题】让 holder.js 与 Angular 一起工作【英文标题】:Make holder.js work with Angular 【发布时间】:2014-03-17 17:56:38 【问题描述】:

当我们将<img src="holder.js/300x200"> 放入ng-app 时,它不起作用,但是当我们把它放到外面时它会起作用。什么给了?

【问题讨论】:

你能确保脚本加载正确吗?也许看看Holder 对象是否存在于控制台中?从文档和阅读 GitHub 上的代码来看,<img src="holder.js/300x200"> 应该可以工作... Holder 确实存在于控制台中。 【参考方案1】:

如果我们添加这个指令

app.directive('holderFix', function () 
    return 
        link: function (scope, element, attrs) 
            Holder.run( images: element[0], nocss: true );
        
    ;
);

那么这两个元素都会起作用

<img data-src="holder.js/300x200" holder-fix>
<img src="holder.js/300x200" holder-fix>

经过测试

Chrome 版本 32.0.1700.107 m

另见:

https://github.com/imsky/holder/pull/26

【讨论】:

【参考方案2】:

如果您在另一个答案中关注 holder.js 项目链接的拉取请求,这里有一个稍微改进的解决方案https://github.com/imsky/holder/pull/26#issuecomment-51218083,我将在下面重现...

javascript 中:

angular.module('MyModule').directive('myHolder', function() 
    return 
        link: function(scope, element, attrs) 
            attrs.$set('data-src', attrs.myHolder);
            Holder.run(images:element.get(0), nocss:true);
        
    ;
);

html 中:

<img my-holder="holder.js/200x300">

这项改进允许您在data-src 的位置指定my-holder(或您选择的任何其他内容),而不是将其指定为额外属性。

(此解决方案归功于 Nick Clark 和 Tris Ding。)

【讨论】:

这就是现在的解决方案given by holder.js's official documentation。【参考方案3】:

您可以使用ng-holder 指令,该指令可用于触发您的 holder.js

这里有ng-holder

为了简短的实现,只需包含指令并将ngHolder 添加到您的应用程序中,这是我从官方 github 获得的指令的完整代码。

(function(window, angular, undefined) 
    'use strict';
    var module = angular.module('ngHolder', []);
    module.directive('holder', [ 
        function() 
            return 
              link: function(scope, element, attrs) 
                if(attrs.holder)
                  attrs.$set('data-src', attrs.holder);
                Holder.run(images:element[0]);
              
            ;
        ]);
)(window, window.angular);

然后在你的应用中添加 ngHolder 就像这样

var MyApp = angular.module('MyApp', ['ngHolder']);

并在您的部分模板中使用这样的库

<img holder="holder.js/490x280/text:some text"/>

希望对您有所帮助。

【讨论】:

以上是关于让 holder.js 与 Angular 一起工作的主要内容,如果未能解决你的问题,请参考以下文章

无法让 Angular html5mode 和 UrlRewriteFilter 与某些 URL 一起工作

如何让 CORS 与 ASP.Net Core Web API 服务器 Angular 2 客户端一起工作

如何让组件路由器 $router 与 Webpack 和 ocLazyLoading 一起使用?

构建 Angular 库后无法将 SCSS 与 Storybook 一起使用

Angular2 中的 ViewChildren 装饰器可以与接口一起使用吗?

如何将 PreferenceFragment 与 ViewPager 一起使用?