2014-10-31 86 views
0

如何获得动态加载的模板和控制器注入?加载我的.html部分和.js控制器后,我会假设下一步是$注入器?但我该如何使用它?像这样的东西...?如何使用动态加载的控制器进行角度注入

我迄今为止的进展: http://plnkr.co/edit/rB5zteYTZ2L1WB5RzlHg

数据从返回$ http.get()

var $injector = angular.injector(['ng']); 

$injector.invoke(function($rootScope, $compile, $document) { 
    $compile(data)($rootScope); 
    $rootScope.$digest(); 
}); 

请问Controller.js文件所需要的格式是用于注射器/编译正确连线?我可以简单地做我在Plunker做的事吗?

Controller1.js

app.controller('Controller1', function ($scope, $famous) { 
     console.log("Inside Controller1"); 
}); 

注:我特别想避免使用requirejs,NG-路线,UI路线,ocLazyLoad,等我想了解一下这些软件包完成最基础用于视图/控制器的路由和动态加载。

+0

我以前发现一篇文章描述了你想要的东西。这是干草堆里的一根针,我失去了它。这可能会让你动态加载模板,如果你还没有这样做:http://stackoverflow.com/questions/12346690/is-there-a-way-to-make-angularjs-load-partials-in-开始与不在时何时要将控制器与模板配对,则需要制定指令并指定模板和控制器。这就是你想要做的事情(将一个动态加载的模板与控制器配对)? – trusktr 2014-11-03 09:02:15

+0

或者您可以使用此答案作为参考http://stackoverflow.com/questions/15250644/angularjs-loading-a-controller-dynamically?answertab=votes#tab-top – talves 2014-11-03 17:55:24

+0

@trusktr - 该示例仍然看起来像一个静态参考已知的部分和控制器。 talves提供的链接更符合我想要做的事情。该链接中给出的示例是相关的。如果我有10k个部分和控制器的列表,用户可以选择,那么定义所有10k模板并将其与控制器匹配到js文件中将是不切实际的。我的目标是允许你选择一个模板作为用户输入,代码将HTTP获取文件,注入并将它们编译到页面中。 – sday 2014-11-03 18:18:08

回答

0

我不知道我是否完全理解你的问题,但它看起来像你想动态加载视图和控制器。我正在使用angular ui routerangularAMD的组合。它工作得非常顺利,用这种方法你会得到一个很好的分离和按需加载。

angular ui router网页:

templateUrl: "partials/state1.list.html", 
    controller: function($scope) { 
    $scope.items = ["A", "List", "Of", "Items"]; 
} 

与该配置指定控制器将被装载并连接到state1.list.html。

这有帮助吗?

+0

是的,我试图动态加载视图和控制器,但我想不依赖于它。没有路由器,没有requirejs,没有其他模块。主要是为了更多地了解角度,浏览器和网络世界。此外,要加载事物充分动态。如果我没有弄错,你的方法确实需要视图/控制器的映射。例如,通过您的方法,它是否允许文件上传对话框指定要上传和注入的全新视图和控制器?或者您是否需要在页面加载过程中声明这些内容?谢谢btw – sday 2014-10-31 21:50:39

+0

如果我有view1/controller1并创建view2/controller2,我是否需要更改任何代码,例如为templateUrl添加另一个条目:?我想创建一个机制,允许我动态地绑定视图和控制器,而不是作为延迟加载的静态路由。 (我仍然想要懒惰的加载部分,我只是不希望它是视图/控制器的需求作为代码中的静态列表)我不明白我需要做什么,但认为丹华林是在这里做:http://weblogs.asp.net/dwahlin/dynamically-loading-controllers-and-views-with-angularjs-and-requirejs – sday 2014-10-31 21:55:56

+0

我认为丹只是试图使用约定,使路由更容易,让你不必指定控制器和视图,只需要一个约定 - 但它仍然是一样的方法,顺便说一下,他也使用requirejs。 ;)你的上传例子是非常特殊的东西,但也许它可以通过使用参数(也由角度ui路由器支持)解决,并对控制器内的这些参数作出反应?最后一件事:有时候,使用库和框架不要重新发明轮子,而是节省大量时间。 :)但任何方式:祝你好运! – timtos 2014-10-31 22:24:02