• Angular模块/服务/MVVM


    angular 与 jquery

    共同点

    • 都是一个前端的JS文件而已

    不同点:

    • angular 是一个框架

      • 我们写的代码由框架调用,我们必须要按照特定的规则编写代码

    • jquery是一个库

      • 我们调用库预制的方法或对象实现我们想要功能

    • 在思想上:+jquery提高了操作DOM的开发效率

      • angular 几乎没有任何DOM操作(不是没有,只是不用我们自己操作)

      • angular 内置一个类似jqLite的东西angular.element()

      • angular 不提倡DOM操作

    什么是AngularJS

    • 一个前端框架,提供一种极大减少DOM操作的编程方式,在前端页面中引入了传统在后台开发中使用的一些思想,增强代码的结构和可维护性

    • 一个功能非常完备的前端框架,通过增强HTML的方式提供一种便捷开发Web应用程序的方式

    • 其核心特点就是几乎无任何DOM操作,让开发人员的精力和时间全部集中于业务

    依赖注入

    • 没事你不要来找我,有事我会去找你。

    • 原理 框架在调用方法的过程中通过获取到传递的参数,然后框架内部将方法toString处理以后, 再通过正则表达式将其获取到然后依次实例化。

    模块

    • 如何进行多模块开发

      • 多模块的开发通常是指多个Module模块开发,

    • 多模块其他使用方式(不推荐)

      • 1.和其他的一样创建多个module模块

      • 2.设置不同的id通过id绑定:< div id="app3">

      • 3通过bootstrap绑定模块:angular.bootstrap(app3,["otherApp"]);

    • 多模块使用

      • 一个参数是寻找模块 angular.module('需要寻找的模块名称')

      • 两个参数是添加模块 angular.module('模块名称',['依赖的模块']);

    • 如何划分模块

      • 1.根据当前需要开发的应用程序的组成划分需要多少模块,比如:

        • 注册模块

        • 登录模块

        • 用户列表页模块

        • 用户详细页模块

    • 2.根据文件类型的不同来划分

      比如:
      • 所有的控制器

        • 所有的服务

        • 所有的指令

    控制器

    • 控制器的作用

      • 初始化属性

      • 暴露属性或者行为

      • 监视数据变化 $scope.name='';

        $scope.$watch('name',function (newVal,oldVal) {
            console.log(newVal);
            console.log(oldVal);
        })//如果是监视对象,后面多添加一个参数true
    • 控制器代码压缩问题

      • 当代码进行js压缩时候controller里面的内容会被当成变量替换掉,为了防止这个问题发生在controller中出现 controller('myCtrl',['scope){}])

    • 控制器的多种写法

      • 1.标准写法 app.controller('myCtrl',function(){})

        1. fuction写在外面(写在外面不能被压缩) function otherCtrl($scope) { $scope.name='123';}app.controller('myCtrl',otherCtrl)

      1. fuction写在外面(写在外面不能被压缩)function otherCtrl(otherscope) { otherscope.name='123'; } otherCtrl.scope'];//这里对方法添加$inject app.controller('myCtrl',otherCtrl)

    • 4在controller内部使用依赖注入 app.controller('myCtrl',function scope,$injector) {

         $injector.invoke(function ($log) {
             $log.info(123);
         })

      })

    • 5 早期使用 (angular-1.2.29版本) function myController($scope) {

         $scope.name="angular早期使用";

      }

    • 6 面向对象方法使用

      • 1.控制器的function不写改为引用function app.controller('myCtrl',demoCtrl);

        • 2.创建一个面向对象的function ` function demoCtrl() {

              this.name='123';
          } `
        • 3.使用的时候添加 as scope ng-controller="myCtrl as scope"

    Angular服务

    • 什么是服务

      • 在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用。AngularJS 内建了30 多个服务。

      • Angular主要用到的服务

      • $scope:作用域,用来负责连接View和Controller,也就是MVVM中的ViewModel相当于桥梁一样。

      • $rootScope

      • $location

      • $window

      • $log

      • $interval和setInterval区别 在数据变换过程中有时候angular监视不到数据变化:

        setInterval(function () {
            $scope.time=new Date();
            console.log($scope.time);
             $scope.$apply();//告诉angular进行数据更新
        },1000)
        //但是如果说使用 $interval这种angular的服务有时候服务内部就帮我们完成了这种数据更新
    • 创建服务 通过module创建: service、factory

      • service创建:app.service('myService',function () { this.name='myService'; });

      • factory创建: app.factory('myFactory',function () { return {

           name:'myFactory', 

        } });

    指令

    • ng-bind

    • ng-bind-html

    • ng-repeat

    • ng-class

    • ng-if

    • ng-hide

    • ng-show

    • ng-switch

    • ng-src

    • ng-href

    • ng-focus

    • ng-blur

    • ng-dblclick

    MVVM设计模式

    • 什么是MVVM设计模式

      • Model(模型)

      • View (视图)

      • ViewModel (视图模型)

      • 由上面三个部分组成其中ViewModel就是$scope起到桥梁的作用将Model和View联系起来

      • MVVM模式是Model-View-ViewMode(模型-视图-视图模型)模式的简称,其最早出现在微软的WPF和Silverlight框架中,使用ViewModel(视图模型)来实现View和Model的粘合,同时让View和Model的进一步分离。方便美工和程序员职能分离。

    • MVVM本质

      • 其本质就是为了代码模块化

        • 模块化的好处是逻辑清晰、维护方便但是同时也会增加代码量和开发成本

    angular的特性

    • 双向数据绑定

    • 指令系统

    • MVVM设计模式

    • 多模块化开发

    • 依赖注入

  • 相关阅读:
    正向代理和反向代理
    轮询和长轮询
    偏函数 方法与函数的区别
    pipreqs 生成项目依赖的第三方包
    git安装与使用
    自动生成接口文档
    上线
    Android APK加固-完善内存dex
    Android APK加固-内存加载dex
    替换ClassLoader
  • 原文地址:https://www.cnblogs.com/bici/p/6058675.html
Copyright © 2020-2023  润新知