嵌入AngularJS视图

San*_*gen 3 angularjs

我有一个AngularJS应用程序,我认为它基本上是非常典型的(类似于许多示例).

<html ng-app="myApp" ...
<body>
...
    <div class="main" ng-view></div>
    ...
Run Code Online (Sandbox Code Playgroud)

有一个$routeProvider我设置了很多whens来引导用户到一个视图(模板部分与控制器),如:

$routeProvider.when('/incident/:identifier', {templateUrl:'incident.html', controller:"IncidentCtrl"});
Run Code Online (Sandbox Code Playgroud)

这一切都很好.用户可以在视图之间来回切换.

现在,让我们说我有一个"事件"的观点.它有一个具有"事件"属性的表单.(您可以更改表单中的值和"保存",这不是这里的要点.)我有以下要求:

  1. 现有表单下方的"添加工单"按钮
  2. 单击按钮时,表单(部分)将加载到现有表单下方,以输入新"工作单"的详细信息
  3. "保存"按钮作为加载表单(部分)的一部分将保存新的"工单"
  4. 形式(部分)是封闭的,卸载的或至少在视觉上被移除
  5. 可能会回到2.重复(添加后续的"工作单")

对于在现有表单下面加载的表单,我想重用现有的模板部分及其后续控制器,我已经将其用于ng-view其他地方的顶层.但是我走了几条道路来实现这个无济于事; ng-include似乎不起作用,因为它非常静态,并且不允许嵌入式元素的大部分生命周期.此外,似乎很难动态加载它,这意味着它将在点击"添加工单"按钮之前加载.有人能指出我可行的策略吗?显然,我的目标是促进现有模板部分和控制器的重用,而不必总是让用户在视图之间移动.非常感激.


编辑:详细说明:我对目前ng-include为止所见过的任何想法都不满意,因为:

  • 如果我不仅仅有一种嵌入的视图,那么它们会有很多.他们都会在没有充分理由被展示之前得到装载; 矫枉过正
  • 我不知道如何参数嵌入的意见以同样的方式我可以通过$routeParams$routeProvider
  • 我对父母和孩子范围之间过多的共享感到不舒服
  • 我没办法干净地为后续的"添加"重新创建控制器

Cha*_*ani 5

我会尽力解决你的问题 ng-include

如果我不仅仅有一种嵌入的视图,那么它们会有很多.他们都会在没有充分理由被展示之前得到装载; 矫枉过正

ng-if可以帮到你.在该条件成立之前,该指令不会加载DOM.当条件变为假时,它也会破坏DOM.所以像

    <div ng-if='conditionwhenthepartialshouldbeshown'>
      <ng-include src='templateName'  ng-init='model=parent.someProperty'/>
    </div>
Run Code Online (Sandbox Code Playgroud)

我不知道如何参数化嵌入视图的方式与我从$ routeProvider传递$ routeParams的方式相同

您可以ng-init在加载视图时用于传递一些参数.检查文档

我对父母和孩子范围之间过多的共享感到不舒服

ng-init可以再次帮到这里.您可以在子范围上创建属性,并将其传递给父范围值ng-init

我没办法干净地为后续的"添加"重新创建控制器

ng-if 这样做对你来说.