当前位置: 首页 > 面试题库 >

AngularJS:ngInclude vs指令

邰建业
2023-03-14
问题内容

我不太了解何时使用指令,何时使用nginclude更合适。以这个示例为例:我有一个局部,password-and-confirm-input- fields.html即用于输入和确认密码的html。我在注册页面和更改密码页面下都使用了它。这两个页面各有一个控制器,部分html没有专用的控制器。

我应该使用指令还是ngInclude为此?


问题答案:

这完全取决于您希望从代码片段中得到什么。就个人而言,如果代码没有任何逻辑,或者甚至不需要控制器,那么我就选择ngInclude。我通常会放置较大的“静态”
html片段,这些片段我不想在这里使视图混乱。(即:假设一个大表,其数据无论如何都来自父Controller。<div ng- include="bigtable.html" />与所有那些凌乱地占据View的行相比,这样做更清洁)

如果存在逻辑,DOM操作,或者您需要在使用的不同实例中对其进行可自定义(也称为不同的渲染),那么directives是更好的选择(起初它们令人生畏,但它们非常强大,请花点时间)

ngInclude

有时你会看到ngInclude's许多被其外部影响$scope/
interface。例如大型/复杂的中继器。因此,这两个接口被捆绑在一起。如果主要内容$scope发生变化,则必须在包含的部分中更改/更改逻辑。

指令

另一方面,指令 可以
具有显式的作用域/控制器/等。因此,如果您考虑必须多次重用某些内容的场景,则可以看到连接其自身的作用域如何使生活变得更轻松和更少令人困惑。

另外,无论何时要与DOM进行交互,都应该使用指令。这样可以更好地进行测试,并将这些动作与控制器/服务/等等分离开来,这是您想要的!

提示: 如果您关心IE8,请确保 _ 不要_ 使用限制:“
E”!有很多解决方法,但是很烦人。只是让生活更轻松,并坚持使用属性/等即可。<div my-directive />

组件 [2016年3月1日更新]

在Angular
1.5中添加了,它实际上是的包装.directve()。大部分时间都应该使用组件。默认情况下,它删除了许多样板指令代码restrict: 'E', scope : {}, bindToController: true。我强烈建议对您的应用中的几乎所有内容都使用它们,以便能够更轻松地过渡到Angular2。

结论:

大多数情况下,您应该创建 零部件和指令

  • 更可扩展
  • 您可以模板化并在外部存储文件(例如ngInclude)
  • 您可以选择使用父作用域,也可以在指令中使用它自己的 隔离 作用域。
  • 更好地在整个应用程序中重复使用

更新3/1/2016

既然Angular
2逐渐发展起来,我们知道通用格式(当然,这里和那里仍然会有一些变化),只是想增加它的重要性components(有时需要限制它们的指令:’例如E’)。

组件 Angular 2的组件非常 相似 @Component 。这样,我们将逻辑和html封装在同一区域中。

确保将尽可能多的内容封装在组件中,这将使向Angular 2的过渡变得更加容易!(如果您选择进行过渡)

这是一篇很好的文章,描述了使用此迁移过程的过程directives(如果您当然要使用组件,则非常相似):http : //angular-
tips.com/blog/2015/09/migrating-directives-to-angular-2/



 类似资料:
  • 例如,Angular 2内置的属性指令ngClass和ngStyle,可以在任何组件或元素上工作。

  • 当在汇编指令级别分析代码时,鉴于现代CPU不串行或按顺序执行指令,指令指针的位置真正意味着什么?例如,假设以下x64汇编代码: 指令指针将在哪条指令上花费大部分时间?我可以为他们所有人想出好的理由: mov-RAX,[RBX]可能需要100秒的周期,因为它是缓存未命中

  • View Example 指令与我们看到的其他指令有不同的语法。 如果你熟悉for...of语句,你会注意到,他们几乎相同。 ngFor允许您指定要迭代的iterable对象,以及在范围内引用每个项的名称。 在我们的示例中,您可以看到该 可用于插值以及属性绑定。 该指令做一些额外的解析,所以当它扩展到模板形式,它看起来有点不同: View Example 请注意,模板元素上有一个奇怪的let-ep

  • 我们可以直接将一个字符串绑定到属性。这就像添加一个html属性一样。 View Example 在这里,由于我们使用表达式绑定到指令,我们需要在方括号中包装指令名称。当你想有一个函数放在适用的类名列表时,传入数组是很有用的。 View Example 在这里我们可以看到,由于对象的 和属性是true,这些classes将会生效,但由于是false,它不会生效。

  • selector: 'app-style-example', template: ` <p style="padding: 1rem" [ngStyle]="alertStyles"> ` }) export class StyleExampleComponent { borderStyle = '1px solid black'; 'color': 're