前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >12-angular 思考和分析 视图和分层咋写-1

12-angular 思考和分析 视图和分层咋写-1

作者头像
西南_张家辉
发布2021-02-02 09:52:54
5770
发布2021-02-02 09:52:54
举报
文章被收录于专栏:张家辉的树屋
  • https://github.com/xufei/blog/issues/18
  • 看上这个就够了!!

Angular 1.x 视图和分层

  • 视图 view
  • 模型 model
  • 视图模型 viewModel

1、根作用域

  • 如果想要在代码中显式使用根作用域,可以注入$rootScope。

2、作用域的继承关系

  • 这个东西需要详细考虑
  • 放在这篇文章探讨
    • https://github.com/xufei/blog/issues/18

Angular 1.x 分层

1、controller: 初始化 scope 对象,在 scope 上添加方法

  • controller 只是纯粹的把 service、依赖关系和其他对象连接起来
  • 业务逻辑应该放在 service 而不是控制器
  • 不应该操作 DOM ,这个事情应该是 service 去做

2、service: 所有与视图逻辑(交互逻辑)无关的部分都应该写到 service 中

  • 请求支援与数据缓存的东西放进 service
  • 集中管理所有数据,然后通过某种方式来请求和修改它
  • 需要仔细考虑和使用,储存数据

3、directive: 全部使用 directive,也就是组件化开发(component),不是只有公用组件需要 directive

  • 需要用到 controller 的地方都封装成自己的 directive
  • DOM 操作都写在指令中写
  • 数据需要格式化的写在 filter 中

@@ 遵循单一职责原则 (SRP)

  • 服务和指令等应该拥有尽可能的少的依赖关系
  • 控制器只是视图和模型的协调组
  • 逻辑就应该尽量少,有利于更好的测试

? 思考下 angular 层次

  • 远程请求,数据缓存等等一律放进service
  • 不得以而产生的DOM操作,一律放进directive(在Angular应用里,需要你手动去操作DOM的场景其实很少了)
  • 数据的格式化,一律做成filter
  • 剩下的东西才是controller应该做的事情,在这里,又有一些事情要考虑:
    • 视图是需要分块、分层的,如果你控制能力不足,最好把controller和视图块按照一对一的关系维护,每块单独都能跑,然后拼起来
    • 嵌套的视图,作用域的关系需要好好考虑,这部分的相关机制可以参考我写的这篇:AngularJS实例教程(二)——作用域与事件 · Issue #18 · xufei/blog · GitHub
    • 有一些东西并不应当在视图分块(姑且称为组件)的树状结构里,而是独立在外,跟这部分东西的交互,应当视情况使用service来通信,不要尝试在$scope体系上过多纠缠。

作者:徐飞 链接:https://www.zhihu.com/question/36315832/answer/66927460 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

? 思考下 angular 数据和监控

  • 大量的 DOM 的操作,在 JavaScript 中是避免不了的,angular JS 的发明就是为了摆脱繁琐的 DOM 操作。
  • 父级和子级关系
    • $parent

? angular 事件总线

  • 类似于公司的负责通讯的机构
  • 订阅式发布模式
image
image
  • 代码写起来也很简单,把它做成一个公共模块,就可以被各种业务方调用了:
  • 1、形成事件
代码语言:javascript
复制
app.factory("EventBus", function() {
    var eventMap = {};

    var EventBus = {
        on : function(eventType, handler) {
            //multiple event listener
            if (!eventMap[eventType]) {
                eventMap[eventType] = [];
            }
            eventMap[eventType].push(handler);
        },

        off : function(eventType, handler) {
            for (var i = 0; i < eventMap[eventType].length; i++) {
                if (eventMap[eventType][i] === handler) {
                    eventMap[eventType].splice(i, 1);
                    break;
                }
            }
        },

        fire : function(event) {
            var eventType = event.type;
            if (eventMap && eventMap[eventType]) {
                for (var i = 0; i < eventMap[eventType].length; i++) {
                    eventMap[eventType][i](event);
                }
            }
        }
    };
    return EventBus;
});
复制代码
  • 2、事件订阅
代码语言:javascript
复制
EventBus.on("someEvent", function(event) {
    // 这里处理事件
    var c = event.data.a + event.data.b;
});
  • 3、事件发布
代码语言:javascript
复制
EventBus.fire({
    type: "someEvent",
    data: {
        aaa: 1,
        bbb: 2
    }
});
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Angular 1.x 视图和分层
    • 1、根作用域
      • 2、作用域的继承关系
      • Angular 1.x 分层
        • 1、controller: 初始化 scope 对象,在 scope 上添加方法
          • 2、service: 所有与视图逻辑(交互逻辑)无关的部分都应该写到 service 中
            • 3、directive: 全部使用 directive,也就是组件化开发(component),不是只有公用组件需要 directive
              • @@ 遵循单一职责原则 (SRP)
              • ? 思考下 angular 层次
              • ? 思考下 angular 数据和监控
              • ? angular 事件总线
              相关产品与服务
              事件总线
              腾讯云事件总线(EventBridge)是一款安全,稳定,高效的云上事件连接器,作为流数据和事件的自动收集、处理、分发管道,通过可视化的配置,实现事件源(例如:Kafka,审计,数据库等)和目标对象(例如:CLS,SCF等)的快速连接,当前 EventBridge 已接入 100+ 云上服务,助力分布式事件驱动架构的快速构建。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档