在AngularJS中,包含在HTML模板中的任何内嵌JavaScript代码都不起作用
在AngularJS中,包含在HTML模板中的任何内嵌JavaScript代码都不起作用。
例如:
main.html文件:
<div ng-include="'/templates/script.html'"></div>
和script.html文件:
<script type="text/javascript"> alert('yes'); </script>
当我打开主页面时,我希望有一个警告消息说“是”,但没有任何反应。 我认为AngularJS中的一些安全限制是防止内联脚本,但我找不到任何解决方法。
注:我不使用jQuery或任何其他框架,只有AngularJS 1.2.7。
jQlite不支持脚本标记。 jQuery的确如此,所以如果你需要这个function的话,推荐使用jQuery。
来自Angular的Igor Minar在这个讨论中 :
我们研究了支持jqlite中的脚本标签,但是为了获得跨浏览器支持需要做些什么,这涉及到很多黑魔法。 由于这个原因,我们决定现在我们只是build议用户在这种情况下使用jQuery和angular。 重写jQuery的三分之一以使其在jqlite中工作是没有意义的。
下面是相关的github问题jqLite应该创build元素的方式与jgor在Igor总结,在closures问题之前,与此:
这对于jqlite来说太疯狂了,所以我们不打算这样做。 相反,我们要logging如果你想在ng:include或ng:view模板中有脚本元素,你应该使用jquery。
演示与jquery plunker
Angular在ng-include
指令上使用$ sanitize来清除脚本。 更好的模板方法是为该模板创build一个控制器。
对模板使用单独的控制器更好。
在template.html中
<form role="form" ng-controller="LoginController"> <input type="text" placeholder="Email" ng-model="email"> <input type="password" placeholder="Password" ng-model="password"> <button class="btn btn-success" ng-click="login()">Sign in</button> </form>
在LoginController
你可以使用任何你想要的代码
angular.module('myApp.controllers', []). controller('LoginController', [function() { alert('controller initialized'); }])
当ng-include
添加内容时触发的事件是$includeContentLoaded
。 你的脚本应该包含在这个事件中:
例如( Plucker Demo ):
function SettingsController($scope, $window) { $scope.template={}; $scope.template.url = "demo.html"; $scope.$on('$includeContentLoaded', function(event){ $window.alert('content load'); }); }
另外你可以使用onload
属性来设置init函数:
HTML
<div ng-include =“template.url”onload =“alertMe()”> </ div> </ div>
调节器
$scope.alertMe=function(){ $window.alert('sending alert on load'); }
包括jQuery和更改angular.js
和jquery.js
顺序。 jQuery必须是第一个,否则不起作用
- 如何使用ng-repeat中的$ index启用类并显示DIV?
- 如何使用ng-pattern在angularJs中validation电子邮件ID
- 如何在ui-router中使用ui-sref传递参数给控制器
- 如何在angularjs应用程序中实现安全(!)身份validation系统?
- AngularJS错误:'参数'FirstCtrl'不是一个函数,得到未定义'
- 错误:资源configuration错误。 预期的响应包含一个数组,但有一个对象?
- Angularjs将最佳实践缩小
- ionic framework$ state.go('app.home'); 在页面上添加我想要去(如何删除它)的返回button?
- 在Angular Directive的链接函数中使用ng-click vs bind