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这是真的!一个非常简单的
有趣的方法怎么样?你能更详细地解释一下解决方案吗?