多个Angularjs应用程序(驱动Portlet)

Rob*_*ian 8 javascript angularjs

我有一个用例需要加载单独的角度应用程序.

基于几个堆栈溢出问题和这个谷歌线程,它是可行的.但是,我无法让它发挥作用.

看文档:

http://docs.angularjs.org/api/angular.bootstrap

看起来你需要提供元素(在元素上获取句柄的正确方法是什么?),然后如何将它与配置,控制器等联系起来.这对路由有何影响?IE如何冲突工作,即app a和app b map/foo分别为/fooa.html和/foob.html ......或者每个应用程序都描述了自己的.otherwise?

谢谢!

Pau*_*yan 8

因此,鉴于要求这是一个服务驱动的内容,我能看到这样做的唯一方法是角度和标准html实践之间的混合.实际上,您需要从plunker书中获取页面并使用Iframe来包含每个单独的portlet.

<!doctype html> <html lang="en">

<body ng-app="plunker" ng-controller="MainCtrl">

<!-- define foo -->

<div>
    <ul class="menu">
        <li><a href="#" ng-click="fooRoute='#/foo1'">foo1</a></li>
        <li><a href="#" ng-click="fooRoute='#/foo2'">foo2</a></li>
    </ul>
    <iframe seamless="true" ng-src="foo.index.html{{fooRoute}}"></iframe> </div>

<div>
    <ul class="menu">
        <li><a href="#" ng-click="barRoute='#/bar1'">bar1</a></li>
        <li><a href="#" ng-click="barRoute='#/bar2'">bar2</a></li>
    </ul>
    <iframe seamless="true" ng-src="bar.index.html{{barRoute}}"></iframe> </div>


<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular.min.js"></script> <script src="app.js"></script> </body> </html>
Run Code Online (Sandbox Code Playgroud)

然后,在每个这些portlet上,您将需要一个完全独立的应用程序(包括加载资源).

<!doctype html>
<html lang="en">

<body ng-app="fooApp">

<div ng-view></div>


<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular.min.js"></script>
<script>
  var app = angular.module('fooApp', ['fooApp.controllers']);

    // Configure the app
    app.config(['$routeProvider', function ($routeProvider) {
        $routeProvider.when('/foo1', {template: '<h1>Foo</h1><h2>foo1</h2>', controller: 'MyCtrl1'});
        $routeProvider.when('/foo2', {template: '<h1>Foo</h1><h2>foo2</h2>', controller: 'MyCtrl2'});
    }]);

    angular.module('fooApp.controllers', []).
            controller('MyCtrl1', [function () {
                console.log("fooApp.MyCtrl1 invoked.");
            }])
            .controller('MyCtrl2', [function () {
                console.log("fooApp.MyCtrl2 invoked.");
            }]);
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

与使用通用应用程序库相比,这对于加载来说效率稍差,但目前这是不可行的.angular-ui的ui-router团队有关于控制独立视图的讨论,这可能是一个可行的解决方案,但目前还没有实现,你可以按照https://github.com/angular-ui/ui上的讨论进行讨论.-router/issues/84并根据您的需要编钟.在https://github.com/angular-ui/ui-router/issues/160上的ui-router问题列表中,现在还有一个专门针对此问题.

这个设计的工作plunker:http://plnkr.co/edit/sPoK3I?p = preview