javascript - 为什么 Angular UI Bootstrap 使用提供程序来处理模式和工具提示中的逻辑,而不是其他组件中的逻辑?

标签 javascript angularjs angular-ui-bootstrap

我注意到 Angular UI Bootstrap 使用 Provider 来处理 Modal 和 Tooltip 组件的所有逻辑,但所有其他组件的逻辑都设置在由指令及其子指令共享的单个 Controller 内.

那么仅对这两个组件使用 Provider 而不是 Controller 有什么好处?

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

最佳答案

  1. 提供商与控制者:

如果你看看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/

    相关文章:

    具有对象和选择功能的 AngularJS BootstrapUI Typeahead

    javascript - 如何使用复选框来过滤 Angular 智能表中的数据?

    javascript - 正则表达式 : match everything beginning from second dot including dot

    javascript - Jquery .load 导致按钮点击问题

    javascript - 找到最短的数学运算序列

    javascript - 如果窗口尚不存在,则允许打开多个窗口

    angularjs - 我想将日期格式设置为 MM/dd/yyyyTHH :MM:SS in Angularjs 2 and i want it should be only MM/DD/YYYY

    javascript - 如何编辑源自超链接(<a href> 标记)的 HTTP GET 请求的授权 header

    javascript - 使用 ngOptions 发出预选列表

    twitter-bootstrap - 如何更改 Bootstrap 分页中下一页和上一页的标签?