我注意到 Angular UI Bootstrap 使用 Provider 来处理 Modal 和 Tooltip 组件的所有逻辑,但所有其他组件的逻辑都设置在由指令及其子指令共享的单个 Controller 内.
那么仅对这两个组件使用 Provider 而不是 Controller 有什么好处?
另外,为什么组件接受选项作为在链接函数中读取和解析的数据属性,而不是使用指令范围来接受选项?
最佳答案
- 提供商与控制者:
如果你看看modal.js的第349行和第350行:
//merge and clean up options
modalOptions = angular.extend({}, $modalProvider.options, modalOptions);
您将看到模式指定的选项与用户指定的选项合并,允许后者覆盖前者。这样做大概是为了在配置时您可以在提供程序中设置默认值,然后再设置它们。提供程序用于在开始时配置您的应用程序。我假设其他组件没有应用程序级配置,因此不需要提供程序(并且可以使用 factory
或仅使用 directive
等)。
- 使用
scope: {/* ... */}
与在指令中不这样做
如果你看一下我选择的随机文件,如 buttons.js你会看到选项的解析方式与第 22 行类似:
scope.$eval(attrs.btnRadio))
这样做的一个原因是,一般来说,您不会创建隔离作用域 - 创建隔离作用域可能意味着您不能在同一元素上拥有另一个 new
-ed 或隔离作用域- 因此请谨慎使用它们 - 这也意味着内部内容无法访问外部的作用域变量(对于 ngTransclude 很有用)。如果我只需要来自外部世界的一个值,并且可以将其粘贴到作为我的指令名称的属性上,那么我几乎总是只是 $observe
或 $eval
或$interpolate
它而不是创建隔离范围。
关于javascript - 为什么 Angular UI Bootstrap 使用提供程序来处理模式和工具提示中的逻辑,而不是其他组件中的逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25839362/