zoukankan      html  css  js  c++  java
  • AngularJS之开发组件的一些思路

    欢迎大家指导与讨论 : )

      一 、前言

        由于笔者水平有限,在这里只是分享自己开发组件的一些思路~ 摘要:无UI组件类、有UI组件类、有UI组件类型2。欢迎拍砖吐槽 O(∩_∩)O

      二 、无UI组件类

        顾名思义,这类组件没有任何表现形式出现在用户界面上,只是一般功能的实现者,也就是平时所用到、所需要开发的 Factory。它一般由 controller 进行调用,用于处理并返回数据。重点是,Fatory 某些方法最好使用 $q(promise),来分隔业务逻辑。

             Controller
             ↓       ↑
        data ↓       ↑ promise
             ↓       ↑
              Factory  
    app.factory('hi', ['$q', '$timeout', function($q, $timeout){
        function show(data) {
           var deferred = $q.defer();
           $timeout(function(){
              // ... 处理数据data
              defer.resolve(result)
           }, 16)
           return deferred.promise;
        }
        return {
          show: function(data) {
             return show(data)
          }
       }
    }])
    app.controller('Ctrl', ['hi', function(){
         $scope.test = function() {
            hi.show(data)
               .then(function(result){
                    // ... 
                })
         }        
    }])        

      三 、有UI组件类

        该类组件的UI主要由 Factory 生成界面并插入到body中,类似于 Ionic的ActionSheet上拉菜单或者是弹窗。该类组件的需要注意的问题主要有:如何利用Angular的特性显示动态的数据、模板,如何更好地增强组件的复用性。因此,笔者的主要思路是:1 . 模板是稳定的而且单例的(生成的模板保存在 Factory属性中)。2 . 我们只需要用数据改变模板的内容( $compile,$rootScope.$new() )。3 . 复用性主要体现在每次调用 Factory 它的初始状态必须是唯一的( scope.$destroy/$rootScope.$new()或者其他一些reset操作 )。当然,使用 $q( promise )来执行回调依然是很好的选择。

              Controller
               ↓       ↑
        option ↓       ↑ promise
               ↓       ↑
                 Factory  

    // 在Factory变量保存单例模板:
    var a = angular.element(_html())
    // 每当生成模板函数时
    return a ? a : angular.element( _html())
    // 每次调用启动函数
    function show(option){
    var scope = $rootScope.$new(); // 新增作用域用于管理视图中的数据
    scope.title = option.title; // 配置内容
    scope.showornot = option.show // 配置动态显示
    $compile(_html())(scope) // 绑定模板和作用域
    }
    // 每次关闭时
    function close(data){
    deferred.resolve(data);
    scope.$destory(); // 销毁作用域
    }
    // 模板函数
    function _html( ){
    return [
    "<div>",
    "<h3>{{ title }}</h3>", // 根据配置参数,动态显示不同内容
    "<div ng-if='showornot'></div>" // 根据配置,动态显示
    "</div>"
    ].join('')
    }

      四 、有UI组件类2

        该类组件与上述的主要区别是UI模板是由指令的template参数所负责,功能实现者是自己开发的 Factory 工具,而 Controller 则是作用域的提供者,用于根据数据进行下一步的业务编写。于是此组件便拆分成3大部分。

                      directive
               ↓   ↑             ↓↑
          调用   ↓   ↑ promise     ↓↑
               ↓   ↑ (data)      ↓↑ 指令scope的绑定策略
             Factory              ↓↑
    ↓↑
    Controller -> 下一步处理

     

     

     

     

  • 相关阅读:
    x-pack-crack
    ELK获取用户真实IP
    多层代理获取用户真实IP
    ELK帮助文档
    logstash filter plugin
    开源实时日志分析ELK平台部署
    消息队列集群kafka安装配置
    日志采集客户端 filebeat 安装部署
    rsync + inotify 同步
    【转】OpenWrt 防火墙/etc/config/firewall介绍
  • 原文地址:https://www.cnblogs.com/BestMePeng/p/AngularJS_Commponet.html
Copyright © 2011-2022 走看看