相关疑难解决方法(0)

仅在需要时动态注入模块

我正在将Require.js与Angular.js结合使用.

某些控制器需要巨大的外部依赖性,而其他控制器则不需要,例如,FirstController需要Angular UI Codemirror.这是额外的135 kb,至少:

require([
  "angular",
  "angular.ui.codemirror" // requires codemirror itself
], function(angular) {
  angular.module("app", [ ..., "ui.codemirror" ]).controller("FirstController", [ ... ]);
});
Run Code Online (Sandbox Code Playgroud)

每次我的页面加载时我都不想要包含指令和Codemirror lib,只是为了让Angular满意.
这就是为什么我现在只在路线被击中时加载控制器,就像这里所做的那样.

但是,当我需要类似的东西时

define([
  "app",
  "angular.ui.codemirror"
], function(app) {
  // ui-codemirror directive MUST be available to the view of this controller as of now
  app.lazy.controller("FirstController", [
    "$scope",
    function($scope) {
      // ...
    }
  ]);
});
Run Code Online (Sandbox Code Playgroud)

如何告诉Angular ui.codemirror在app模块中注入模块(或任何其他模块)?
我不在乎它是否是一种完成此操作的hackish方式,除非它涉及修改外部依赖项的代码.

如果它有用:我正在运行Angular 1.2.0.

requirejs angularjs

44
推荐指数
2
解决办法
6万
查看次数

大型AngularJS应用程序设计

我需要建议设计一个具有多个复杂模块的AngularJS应用程序,并根据模块在认证和授权后加载的用户角色.有些用户可以访问一个简单的模块,有些用户可以访问仪表板,有些用户可以访问2个以上的模块.

我们已经确定了很多可以在不同模块中重用的指令.在设计阶段,我们确定了应该存在的以下事项,我们对以下某些项目有答案,但我们仍需要专家的建议:

  • 一个模块可以有
    • 谐音
    • 控制器
    • 指示
    • 服务
  • 异常处理(HTTP状态代码或业务错误)
  • 记录(带行号,从哪个功能)
  • 可能还需要在服务器中保存记录的信息
  • 应该能够打开和关闭日志记录
  • 通过工厂类定制小部件(在其他模块中重用)
  • 共享指令(独立范围)
  • 共享模块
  • 共享实用程序(排序,过滤等)
  • 根据主数据的枚举器
  • 常数通过单身人士
  • 身份验证(CSRF)
  • 离线存储
  • REST服务
  • 从一个模块调度并在其他模块中处理它的事件处理

该应用程序的UI看起来像是一个固定的菜单栏位于页面顶部,左上角有一个下拉导航,具有多个链接,具体取决于用户的角色.当用户单击链接时,相应的模块应该加载到页面中.必须有一个空项目,它是手动引导的,并在运行时加载其他模块.

我们的方法是具有以下文件夹结构:

  • 应用
    • 资产
      • CSS
      • lib js
      • 图片
    • 常见的组件
      • 指令
      • 公用事业
      • 认证
      • 用于保存$ resource调用的服务代理
      • 枚举
      • 常量
    • 模型
      • 实体json(示例客户,产品等)
    • 业务模块A.
      • 谐音
      • 指令
      • 服务
      • 控制器
    • 业务模块B.
    • 业务模块C.
    • 的index.html
    • Requirejs配置文件

所以我的问题是:

  • 模块内的服务如何与其他模块通信?
  • 模块应该独立开发和运行?
  • 如何通过传输数据来处理模块之间的通信?
  • 如何集成以上所有元素,特别是异常处理,日志记录?
  • 开发人员应该了解我们定义的约定?
  • 调用日志,在模块之间发送信息的方法是什么?

javascript angularjs

30
推荐指数
3
解决办法
2万
查看次数

通过应用程序配置 AngularJS 的动态提供程序选项

我有接受如下配置的提供者模块:

angular.module('app', ['search']).
  config(['$searchProvider', function($searchProvider) {
    $searchProvider.options({
      resultLimit:50,
      defaultSort:'highToLow'
    });
  }]);
Run Code Online (Sandbox Code Playgroud)

每个客户端都会有一个新的应用程序实例化 --- 所以我正在考虑使用客户端自助服务门户来配置meta对象。

这意味着提供者模块现在需要在回调方法中等待,meta然后才能设置各自的配置。

但让我们都记住:配置块- 在提供者注册和配置阶段执行。只有提供者和常量可以注入配置块。这是为了防止服务在完全配置之前意外实例化......

...所以文档说您可以在配置块中使用 provider,但我不确定您是否可以使用它们进行服务调用。因为我不知道如何以正确的方式处理这个问题,所以我将向您展示我的“高级”想法:

使用另一个提供程序回调包装依赖提供程序:

angular.module('app', ['search','meta']).
  config(['$searchProvider','$metaProvider', function($searchProvider, $metaProvider) {
    $metaProvider.get(function(meta){
      $searchProvider.options(meta);
    });
  }]);
Run Code Online (Sandbox Code Playgroud)

处理这个问题的最佳方法是什么?

javascript angularjs

5
推荐指数
1
解决办法
2865
查看次数

标签 统计

angularjs ×3

javascript ×2

requirejs ×1