我正在编写一个在我无法控制的另一个页面中调用的javascript应用程序。我希望能够嵌入一个Angular JS应用程序,但是如何在不修改URL的情况下处理路由?在这种情况下,测试(即e2e)如何工作?
编辑:该应用是一个wordpress插件,它叠加在Wordpress信息中心上,因此无法修改网址和网页历史记录。该应用程序将绑定到嵌入在页面中的div,并使用CSS覆盖在现有内容上。
答案 0 :(得分:7)
我相信您可以查询AngularJS和您的应用,并使用钩子提供必要的HTML。有几点需要注意:
由于您在生成的网址中运行,因此必须动态构建templateURL
。
例如,将URL的脚本标记输出到插件文件夹:
<script>var MY_PLUGIN_BASE = '<?php echo plugins_url(); ?>'</script>
然后使用该常量定义您的路线和templateURL
:
$routeProvider
.when('/', {
templateUrl: MY_PLUGIN_BASE+'my-plugin/views/main.html',
controller: 'Main'
})
这有效,但总的来说我会避免在这种情况下使用路线。这导致控制器和指令中的更多工作,但它更安全,因为页面上可能有其他客户端MVC应用程序。
ng-app
附加到视图的根元素而不是body
。
对于更一般的嵌入式AngularJS应用程序(根据我的经验:书签),您需要:
window.angular
),CSS和HTML。注入您应用的JS文件。因为只有一个ng-app
会自动启动,所以使用angular.bootstrap
angular.bootstrap(document.getElementById('my-app'), ['MyApp'])
使用templateURL
的绝对网址,并确保该网址已启用CORS。