为什么Angular UI引导使用提供程序来处理模态和工具提示中的逻辑,而不在其他组件中

Why does Angular UI Bootstrap use a provider to handle the logic in the modal and tooltip but not in the other components?

本文关键字:工具提示 组件 其他 模态 UI Angular 处理 程序 为什么      更新时间:2023-09-26

我注意到Angular UI Bootstrap使用提供程序来处理Modal和Tooltip组件的所有逻辑,但所有其他组件的逻辑都设置在指令及其子指令共享的单个控制器内。

那么,只为这两个组件使用提供程序而不是控制器有什么好处呢?

此外,为什么组件接受选项作为在链接函数中读取和解析的数据属性,而不是使用指令范围来接受选项?

  1. 提供商与控制器:

如果你看看modal.js:的349和350行

//merge and clean up options
modalOptions = angular.extend({}, $modalProvider.options, modalOptions);

您将看到模态指定的选项与用户指定的选项合并,允许用户覆盖前者。这样做大概是为了在配置时可以在提供程序中设置默认值,然后进行设置。提供程序用于在开始时配置您的应用程序。我认为其他组件没有应用程序级配置,因此不需要提供程序(可以使用factory或仅使用directive等)

  1. 在指令中使用scope: { /* ... */ }与不这样做

如果你看看我选择的一个随机文件,比如buttons.js,你会发现选项在第22行的解析是这样的:

scope.$eval(attrs.btnRadio))

这样做的一个原因是,通常情况下,不创建隔离作用域-创建一个隔离作用域可能意味着在同一元素上不能有另一个new-ed或隔离作用域,所以要谨慎使用它们-这也意味着内部内容不能访问外部的作用域变量(对ngTransclude有用)。如果我只需要一个来自外部世界的值,并且我可以将它粘贴在作为指令名称的属性上,那么我几乎总是只使用$observe$eval$interpolate,而不是创建一个隔离范围。