【问题标题】:How to load a script using custom angular directive?如何使用自定义角度指令加载脚本?
【发布时间】:2014-12-18 04:20:32
【问题描述】:

我正在尝试在我的自定义角度指令中加载脚本。现在,它只是在 DOM 中添加脚本标签,但没有加载它。

angular.module('myApp')
  .directive('rjHeader', function () {
    return {
      restrict: 'E',
       template : function(e,a){
           return '<script type="text/javascript" charset="utf-8" src="https://my.web.com/path/' + a.locale + '/some.js" ></script>';  
        }
    };
  });

在html中

<div rj-Header locale="en_US"></div>

在浏览器中打开页面时,它会正确添加预期的脚本。

<script type="text/javascript" charset="utf-8" src="https://my.web.com/path/en_US/some.js" ></script> 

但这实际上并没有加载这个 .js 文件。如果我简单地将这一行复制粘贴到我的 html 中,那么它会按预期工作。如何使用自定义角度指令注入脚本?

【问题讨论】:

标签: javascript angularjs


【解决方案1】:

这里似乎有点不对劲,但如果你真的想这样做,你可以在指令的元素上附加一个脚本标签:

app.directive('loadDirective', function() {
  return {
    restrict: 'E',
    link: function($scope, $el) {

      var script = document.createElement('script');
      script.src = '//cdnjs.cloudflare.com/ajax/libs/emojione/1.3.0/lib/js/emojione.min.js'
      $el.append(script);
    }
  }
});

Plunk

【讨论】:

  • 是的,经过几次尝试后,我得出了相同的解决方案,但我想知道为什么如果您通过模板加载脚本会得到 SyntaxError: unterminated string literal
  • 确定我会采用这种方法吗?不过,“这里似乎有点不对劲”是什么意思?
  • @RakeshJuyal 当有很多其他方法可以在页面上获取 JS(RequireJS、Curljs,只是在 vanilla js 中执行)时,在指令中加载脚本标记感觉很奇怪。也就是说,我不熟悉你的用例,所以这种感觉可能是没有根据的。
猜你喜欢
  • 1970-01-01
  • 2016-04-13
  • 1970-01-01
  • 1970-01-01
  • 2016-03-01
  • 2018-10-16
  • 2015-10-08
  • 1970-01-01
  • 2020-03-21
相关资源
最近更新 更多