我刚开始使用angularJS,并努力为我要做的事情找出合适的架构。我只有一个页面应用程序,但 URL始终应该保持不变 ;我不希望用户能够导航到根以外的任何路由。在我的应用中,有一个主要的div需要承载不同的视图。访问新视图时,我希望它接管主div中的显示。以这种方式加载的视图可以被丢弃或停留在DOM中,就像隐藏在DOM中一样- 我很想知道每个视图如何工作。
我提出了一个我想做的粗略的工作示例。 请参阅此Plunk中的工作示例。 基本上,我想将HTML动态加载到DOM中,并使标准的angularJS控制器能够连接到该新HTML中。有没有比使用我在这里使用的自定义指令并使用$ compile()挂接到Angular更好/更简单的方法了?也许有点像路由器,但是不需要URL更改才能运行吗?
这是到目前为止我正在使用的特殊指令(摘自另一篇SO文章):
// Stolen from: http://stackoverflow.com/questions/18157305/angularjs-compiling-dynamic-html-strings-from-database myApp.directive('dynamic', function ($compile) { return { replace: true, link: function (scope, ele, attrs) { scope.$watch(attrs.dynamic, function(html) { if (!html) { return; } ele.html((typeof(html) === 'string') ? html : html.data); $compile(ele.contents())(scope); }); } }; });
谢谢,
安迪
我会使用内置ngInclude指令。在下面的示例中,您甚至不需要编写任何JavaScript。模板可以轻松地驻留在远程URL中。
ngInclude
这是一个工作示例:http : //plnkr.co/edit/5ImqWj65YllaCYD5kX5E?p=preview
<p>Select page content template via dropdown</p> <select ng-model="template"> <option value="page1">Page 1</option> <option value="page2">Page 2</option> </select> <p>Set page content template via button click</p> <button ng-click="template='page2'">Show Page 2 Content</button> <ng-include src="template"></ng-include> <script type="text/ng-template" id="page1"> <h1 style="color: blue;">This is the page 1 content</h1> </script> <script type="text/ng-template" id="page2"> <h1 style="color:green;">This is the page 2 content</h1> </script>