Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何有条件地将脚本元素包含在_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

Javascript 如何有条件地将脚本元素包含在

Javascript 如何有条件地将脚本元素包含在,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我试图有条件地在我的页面上包含聊天: <body ng-app="myApp"> <!-- some code --> <script type="text/javascript" ng-if="expression"> window.$zopim||(function(d,s){var z=$zopim=function(c){z._.push(c)},$=z.s= d.createElement(s),e=d.getElement

我试图有条件地在我的页面上包含聊天:

<body ng-app="myApp">
  <!-- some code -->

  <script type="text/javascript" ng-if="expression">
    window.$zopim||(function(d,s){var z=$zopim=function(c){z._.push(c)},$=z.s=
    d.createElement(s),e=d.getElementsByTagName(s)[0];z.set=function(o){z.set.
    _.push(o)};z._=[];z.set._=[];$.async=!0;$.setAttribute("charset","utf-8");
    $.src="//v2.zopim.com/?my-zopim-id";z.t=+new Date;$.
    type="text/javascript";e.parentNode.insertBefore($,e)})(document,"script");
  </script>
</body>

window.$zopim | |(函数(d,s){var z=$zopim=函数(c){z.|.push(c)},$=z.s=
d、 createElement,e=d.getElementsByTagName[0];z.set=function(o){z.set。
_.push(o)};z.=[];z.set.=[];$.async=!0;$.setAttribute(“字符集”,“utf-8”);
$.src=“//v2.zopim.com/?my zopim id”z.t=+新日期;$。
type=“text/javascript”e.parentNode.insertBefore($,e)})(文档,“script”);
但聊天脚本似乎在指令
ng if
之前执行


如何使Angular应用程序先检查条件,然后从
标记执行脚本?

内联Javascript始终优先于Angular(首先由浏览器解析)。最好的方法是在控制器中注入/执行javascript,并附带条件或创建指令。

这可以通过以下技巧实现:

  <script ng-if="..." type="{{ 'text/javascript' }}">
    ...
  </script>

...
绑定将阻止脚本以正常方式执行

请注意,由于Angular的jqLite实现处理
元素的方式,上述内容仅在加载jQuery(在Angular之前)时才起作用


更简洁的方法是一个指令,它的作用与上面的
相同,但有防止其多次执行的保护措施(注意,将
放入指令的模板中与上面的解决方案对jQuery有相同的要求)。

一个本机的轻量级方法,即没有jQuery,没有角度指令,如果必须在实际的javascript中使用if语句,则不能使用ng。

可以。@BobBrinks。@estus啊,是的,我明白了。你可能不应该这样。@BobBrinks这是真的!一个非常简单的
有趣的方法怎么样?你能更详细地解释一下解决方案吗?