AngularJS的设计问题-嵌套视图

AngularJS的设计问题-嵌套视图,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我是AngularJS的新手,我面临着一个与视图相关的问题。我有一个这样的模型(伪代码) 现在,我应该有一个与此路径myapp/contract/edit匹配的视图contracted.html。在该视图中,应该有某种嵌套视图,用于显示链接到我正在编辑的合同的人员详细信息。我应该怎么做呢?我对观点和指令感到困惑。。。它应该是一个指令吗 任何帮助都将不胜感激它不应该是指导性的 考虑嵌套视图和右视图。目前AngularJS不支持嵌套视图,但有一个项目支持嵌套视图 如果你不想走那么远,那就坚持使用视图

我是AngularJS的新手,我面临着一个与视图相关的问题。我有一个这样的模型(伪代码)

现在,我应该有一个与此路径myapp/contract/edit匹配的视图contracted.html。在该视图中,应该有某种嵌套视图,用于显示链接到我正在编辑的合同的人员详细信息。我应该怎么做呢?我对观点和指令感到困惑。。。它应该是一个指令吗


任何帮助都将不胜感激

它不应该是指导性的

考虑嵌套视图和右视图。目前AngularJS不支持嵌套视图,但有一个项目支持嵌套视图


如果你不想走那么远,那就坚持使用视图。

有多种方法可以解决这个问题

首先非常简单,而且非常脏,请使用
ng include
。例如,创建一个名为
PersontTmpl.html
的模板文件:

<div>
  {{person.firstName }} {{person.lastName}}
</div>
这是一个肮脏的解决方案,因为您必须始终以相同的名称向作用域公开person

第二种方法是创建指令:

angular.module('nameofyourmodule')
  .directive('person', function () {
    return {
      templateUrl: 'somepathToTemplate/PersonTmpl.html',
      restrict: 'AE',
      scope:{person:"="}
    };
  });
现在,当您想要显示“currentPerson”时,您必须在其他模板/视图中执行以下操作:

 <div person='currentPerson' />

此调用将显示使用“currentPerson”对象初始化的人员模板


为了真正理解指令是如何工作的,我建议观看演示文稿,或者试着阅读

,我对角度非常困惑。我遇到了这个链接(),这家伙解释了他是如何解决嵌套视图缺乏的问题的。然后我看到了另一个链接(),他们解释说我们不应该使用嵌套视图,而应该使用指令。我刚看过指令文档。我很想在这种特殊情况下使用它们。然后是你,告诉我我不应该:)正如你所说的,第一个人展示了他的作品,这很好。我建议你们读一下这些,看看第二个人的例子,他有点道理,因为人们可能以错误的方式接近嵌套视图。不过,UI路由器似乎是一种正确的方式。你可以在谷歌上搜索其他嵌套视图相关的问题,这些问题都指向RouterSo,所以这两个人都是对的。这很难做出决定。我能理解ui路由器的意义,因为它看起来更像是我已经习惯了(我来自ASP.net MVC世界,这里的URL类型为/controller/action/parameter。另一方面,ui router似乎是一个独立的项目,可能永远不会成为Angular的一部分。我即将开始一个大项目,所以我有点害怕开始使用这种项目(并不是说它不好,但它可能不会持久。艰苦的生活……你可以用一个片段来展示这个人的细节。对不起,我刚刚看到你的帖子,我错过了它。事实上,使用ng include似乎是可能的,但就我的研究而言,使用指令似乎更常见、更干净,即使其他人倾向于说一个should使用ui路由器。我想我会采用指令方式。我必须已经阅读了整个文档,但它没有提供任何解决此问题的示例(但非常常见)问题。谢谢你给了我一些线索。实际上我已经得出结论,指令是解决问题的方法。我的“嵌套视图”实际上比只显示名字和姓氏要复杂得多(但你可能已经猜到了)。因此,我也需要为该指令设置一个控制器。但这似乎是可能的,我只是不知道在指令中设置大量逻辑是否是一种好的做法…@嗯,在指令中设置一个控制器是完全有效的(在指令定义对象中有一个特殊的参数),也是将参数传递到控制器的唯一可靠方法。指令本身也不包含任何逻辑。所有这些都将被委托到控制器和模板中,指令本身将简单地重用它,并且它们将共享相同的范围。我可以添加示例如何在指令中使用控制器,如果您想这样做的话。好的,我已经看到了一些网上的例子。但它们都很简单。我想我必须在上面发布一个新问题,以便解释我试图实现的目标的全貌。我需要先玩一下指令。谢谢!
angular.module('nameofyourmodule')
  .directive('person', function () {
    return {
      templateUrl: 'somepathToTemplate/PersonTmpl.html',
      restrict: 'AE',
      scope:{person:"="}
    };
  });
 <div person='currentPerson' />