一尘不染

AngularJS如何动态添加HTML并绑定到控制器

angularjs

我刚开始使用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);
      });
    }
  };
});

谢谢,

安迪


阅读 273

收藏
2020-07-04

共1个答案

一尘不染

我会使用内置ngInclude指令。在下面的示例中,您甚至不需要编写任何JavaScript。模板可以轻松地驻留在远程URL中。

这是一个工作示例: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>
2020-07-04