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设计模式
  • 多模块化开发
  • 依赖注入
时间: 2024-12-17 22:45:15

Angular模块/服务/MVVM的相关文章

angular模块

在angular中,模块可以是一个对象.一个方法或一个数组(数组的最后一个元素必须是方法).后面要讲的模块属性和方法,都是针对通过angular.module()方法定义的模块而言的,我称之为angular模块. 通过angular.module()方法定义的模块是唯一的,如果重复定义,后面的就会覆盖前面的定义.不是通过angular.module()定义的模块,比如一个方法或一个数组,这些模块也是唯一的,但是这些模块一旦定义无法被修改. angular模块可以说是一个空对象,因为它本身不包含任

angular中的MVVM模式

在开始介绍angular原理之前,我们有必要先了解下mvvm模式在angular中运用.虽然在angular社区一直将angular统称为前端MVC框架,同时angular团队也称它为MVW(Whatever)框架,但angular框架整体上更接近MVVM模式.下面是Igor Minar发布在Google+ https://plus.google.com/+IgorMinar/posts/DRUAkZmXjNV的文章内容: MVC vs MVVM vs MVP. What a controver

angular模块详解

原文: https://www.jianshu.com/p/819421ff955a 大纲 1.angular应用是模块化的 2.对模块(Module)的认识 3.模块的分类:根模块和特性模块 4.NgModel参数详解 5.imports数组与文件头部的import的对比 angular应用是模块化的 1.Angular 应用是模块化的,并且Angular有自己的模块系统,它被称为Angular模块或NgModules. 2.每个Angular应用至少有一个模块(根模块),习惯上命名为AppM

Angular 模块 (NgModule)

NgModule 是一个带有 @NgModule 装饰器的类. Angular 模块把组件.指令和管道打包成内聚的功能块,每个模块聚焦于一个特性区域.业务领域.工作流或通用工具. NgModule 的元数据会做这些: 声明某些组件.指令和管道属于这个模块. 公开其中的部分组件.指令和管道,以便其它模块中的组件模板中可以使用它们. 导入其它带有组件.指令和管道的模块,这些模块中的元件都是本模块所需的. 提供一些供应用中的其它组件使用的服务. 原文地址:https://www.cnblogs.com

angular 自定义服务封装自定义http请求

在angular中将http请求,放置在一起封装成服务,可减少代码重复,方便使用 var ngpohttprest = angular.module('ngpohttprest', []); ngpohttprest.factory('httpItemCore', function ($http, $q) { return { search: function (params) { var defer = $q.defer(); $http({ method: 'get', params: pa

angular模块和组件之间传递信息和操作流程的方法(笔记)

angular的模块之间,以及controller.directive等组件之间,是相对独立的,用以实现解耦合. 为实现相互之间传递信息及操作流程,有以下一些机制: 1.事件机制: $scope.$broadcast:向下广播事件,下方所有的scope都会接收到这个事件,事件不能中途终止. $scope.$emit:向上冒泡事件,可带参数,一直冒泡到$rootScope,中途可以用stopPropagation()方法终止冒泡. 2.scope的继承机制: 子scope的__proto__对象就

Angular.js 学习二---$scope和$rootScope,Angular模块的run方法,依赖注入中代码压缩

一.$scope和$rootScope的区别 一句话总结: $rootScope针对全局的作用域生效 $scope只针对当前的controller作用域生效 二.AngularJS模块的run方法 run方法初始化全局的数据,只对全局作用域起作用 如$rootScope <script type="text/javascript"> var m1 = angular.module('myApp', []); m1.run(['$rootScope', function ($

angular $q服务的用法

先说说什么是Promise,什么是$q吧.Promise是一种异步处理模式,有很多的实现方式,比如著名的Kris Kwal's Q还有JQuery的Deffered. 什么是Promise 以前了解过Ajax的都能体会到回调的痛苦,同步的代码很容易调试,但是异步回调的代码,会让开发者陷入泥潭,无法跟踪,比如: funA(arg1,arg2,function(){ funcB(arg1,arg2,function(){ funcC(arg1,arg2,function(){ xxxx.... })

ionic准备之angular基础———服务provider 和 factory(9)

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body ng-app="myApp"> <div ng-controller="firstController"> <ul>