Angularjs不会在ng-view中加载脚本

我有一些特定的视图脚本。 但是,当angularjs加载视图时,该脚本似乎没有执行。

的index.html

<html> <body ng-app="adminApp"> <div ng-view=""></div> <script src="bower_components/angular/angular.js"></script> <script src="scripts/app.js"></script> <script src="scripts/controllers/main.js"></script> </body> </html> 

Main.html – 在ng-view下加载

 hello world <script> alert('Hello, John!') </script> 

在这个例子中,当页面加载的时候,我看到一个打印在网站上的基本的Hello World。 但是,我没有popup一句“你好,约翰”。

任何想法,为什么我不能加载特定于某个视图的脚本?


额外信息 app.js

 'use strict'; angular.module('adminApp', []) .config(function ($routeProvider) { $routeProvider .when('/', { templateUrl: 'views/main.html', controller: 'MainCtrl' }) .otherwise({ redirectTo: '/' }); }); 

控制器/ main.js

 'use strict'; angular.module('adminApp') .controller('MainCtrl', function ($scope) { $scope.awesomeThings = [ 'HTML5 Boilerplate', 'AngularJS', 'Karma' ]; }); 

这就是jqLit​​e的工作方式。 如果您想要评估模板中的脚本,请在AngularJS之前包含jQuery 。 如果包含jQuery,脚本将被评估。 尝试删除jQuery,你会看到最初观察到的行为。

更新 :因为有些人在评论中要求详细说明,这里是:

当一个路由匹配时, ngView使用jqLit​​e(或jQuery的,如果加载) html()方法来设置元素的内容(一个ngView被声明)。 换句话说, ngView.link()就是这样的:

 $element.html(template) 

所以它归结为如何在jqLit​​e和jQuery中实现html() 。 jqLit​​e使用本地的innerHTML属性,它只设置内容但不评估脚本。 另一方面,jQueryparsing出所有脚本标签并执行它们(通过构build和附加脚本DOM元素到页面)。

如果我包含需要与视图一起工作的脚本,如何在视图加载时触发它? 我不想包括jQuery和/或分割我的脚本。

要在不加载jQuery的情况下执行<script>标记,请使用jqLit​​e查找<script>标记,然后eval innerHTML

 app.controller("vm", function($scope, $element) { //FIND script and eval var js = $element.find("script")[0].innerHTML; eval(js); }); 

PLNKR上的演示

另请参阅AngularJS问题#369 – jqLit​​e应该以与jQuery相同的方式创build元素