AngularJS:ngInclude vs指令

我不太明白什么时候使用指令,什么时候使用nginclude更合适。 以这个例子:我有一个部分, password-and-confirm-input-fields.html ,这是input和确认密码的HTML。 我在注册页面和更改密码页面下使用这个。 这两个页面都有一个控制器,部分html没有专用的控制器。

我应该使用指令还是ngInclude呢?

这一切都取决于你想要从你的代码片段。 就个人而言,如果代码没有任何逻辑,或者甚至不需要控制器,那么我用ngInclude去。 我通常会放大更多的“静态”HTML片段,我不想在这里混淆视图。 (也就是说:比方说一个大数据表来自父控制器,而不是所有那些使视图混乱的行都比<div ng-include="bigtable.html" />更清晰)

如果有逻辑,DOM操作,或者你需要在不同的实例中定制它(也就是呈现不同的),那么directives是更好的select(起初它们令人望而生畏,但它们非常强大,给它时间)。

ngInclude

有时你会看到ngInclude's外部$scope / interface影响的ngInclude's 。 比如一个大/复杂的中继器可以说。 这2个接口因此而连在一起。 如果主$scope发生更改,则必须在包含的部分内更改/更改逻辑。

指令

另一方面,指令可以有明确的范围/控制器/等等。所以如果你想要一个场景,你不得不重复使用多次,你可以看到如何连接自己的范围将使生活更轻松,更less混乱。

而且,只要你打算和DOM交互,你应该使用一个指令。 这使得testing更好,并将这些操作从控制器/服务/等等分离出来,这是你想要的!

提示:确保不要使用限制:“E”,如果你在乎IE8! 有办法解决这个问题,但是很烦人。 只是让生活更轻松,坚持属性/等。 <div my-directive />

组件 [更新3/1/2016]

在Angular 1.5中添加了它,它基本上是.directve()一个包装器。 组件应该在大部分时间使用。 它删除了很多boilerplate指令代码,默认情况下是restrict: 'E', scope : {}, bindToController: true 。 我强烈build议您在应用程序中使用这些function,以便更轻松地转换到Angular2。

结论是:

大部分时间你都应该创build组件和指令

  • 更具可扩展性
  • 你可以模板和外部的文件(如ngInclude)
  • 您可以select使用父范围,或者在指令中使用它自己的隔离范围。
  • 在整个应用程序中更好地重用


更新3/1/2016

现在Angular 2正在慢慢地结束,我们知道一般的格式(当然这里和那里会有一些变化)只是想增加components重要性(有时是指令,如果你需要限制的话:例如“E”)。

组件 Angular 2的@Component非常相似 。 通过这种方式,我们将逻辑和html封装在同一个区域。


确保你在组件中封装了尽可能多的东西,这将使转换到Angular 2更容易! (如果你select过渡)

这里有一篇很好的文章描述了这个使用directives迁移过程(如果你打算使用组件的话,非常相似): http : //angular-tips.com/blog/2015/09/migrating-directives-to-angular-2/