Angular单页应用&AngularJS内部实现原理

回顾
  • 自定义指令
  • 登录后获取登录信息session
    • 首先在登录验证的时候保存一个user
    • 在学生管理页面中运用ajax调用获取到登录的用户信息
    • 对注销按钮添加点击事件:调用ajax在表现层给user赋值为null
Angular实现单页应用

angular中实现单页应用是运用了UI-router插件

  • 路由

    • 后台中的路由是用来配置路径,分配请求的方法;
    • angular中的路由也是同样的原理,通过导入ui-router插件,在main.js中配置不同的路由
  • 实现方法
    • 先导入ui-router文件

      var mainApp = angular.module("mainApp",["ui-router","regApp","loginApp","studentApp"]);
        mainApp.config(function($urlRouterProvider,$stateProvider){
        $urlRouterProvider.when("","/reg");
        $stateProvider.state("reg",{
            url:"/reg",  //路由匹配的路径
            templateUrl:"modules/reg/reg.html",  //文件模板路径
            controller:"RegController"
        }
      }
      
        //在html中的代码
        <body>
            <div ui-view><div>
        <body>
       
Angular内部实现原理

angular的实现原理主要是利用了三个对象:$watch,$digest,$apply;

  • $watch 监听(列表)对象(类数组)

    • 所有页面上绑定的属性都会放在监听列表中,并不是所有$scope中的属性都会放在监听列表中,只有页面上绑定的才会放入监听列表。
    • 监听列表的作用就是放置所有绑定在页面上的属性
      1 $scope.$watch("name",function(a,b){
      2       console.log("name is changed");
      3   });
      4   //里边两个参数,a是修改之后的值,b是修改之前的值
       
  • $digest 循环对象
    • 循环监听列表中的数据是否发生变化,则把$watch中的所有数据拿来循环,一旦有监听对象发生变化就调用回调函数进行DOM操作。
    • 直到没有数据变化为止。
    • 为了防止无限循环,在设计angular的过程中设定了循环次数最多10次,如果超过10次则会报错。
    • 这种机制就要求不要进行过多的数据联动。
    • 这个机制有一个前提:循环列表中的对象在Angular的上下文环境中。
  • 用$apply可以让代码回到Angular的上下文环境
    1 setTimeout(function(){
    2           $scope.$apply(function(){
    3               $scope.name = "changed";
    4           });
    5   }, 1000);
     
时间: 2024-11-07 01:50:06

Angular单页应用&AngularJS内部实现原理的相关文章

AnjularJs的增删改查(单页网站)

2016.6.4 学习文献: 你的第一个AngularJS应用:https://segmentfault.com/a/1190000000347412 AngularJS 提交表单的方式:http://www.oschina.net/translate/submitting-ajax-forms-the-angularjs-way AngularJS中$http服务的简单用法:http://www.2cto.com/kf/201506/405137.html 代码由3块实现: 1.Ui mvc5

AngularJS实现单页应用的原理——路由(Route)

AngularJS实现单页应用的原理——路由(Route) 路由:告诉你一个通往某个特定页面的途径 http://127.0.0.1/index.html#/start http://127.0.0.1/index.html#/main #/start <=> start.html #/main <=> main.html SPA应用中的页面切换的原理: (1)使用JS解析当前的页面地址 location.hash( ) (2)查找字典,找到指定的路由地址对应的真正的页面名称 (3

通过Web Api 和 Angular.js 构建单页面的web 程序

在传统的web 应用程序中,浏览器端通过向服务器端发送请求,然后服务器端根据这个请求发送HTML到浏览器,这个响应将会影响整个的页面,比如说:用户通过一个连接导航到一个页面,会发送一个请求到服务器端,接下来服务器将会发送一个新的页面给浏览器. 但是在单页面应用程序中,整个页面只是在浏览器一开始请求的时候才会加载,接下来的请求,下来的交互请求都是通过ajax 来完成的,这就意味着只有部分的页面会更新,并不需要去加载整个的页面,这就减少了对用户操作的响应时间,从而使用户有一个更流畅的体验.但是在传统

Nodejs之MEAN栈开发(六)---- 用Angular创建单页应用

在上一节中我们学会了如何在页面中添加一个组件以及一些基本的Angular知识,而这一节将用Angular来创建一个单页应用(SPA).这意味着,取代我们之前用Express在服务端运行整个网站逻辑的方式(jade.路由都需要在服务端编译),我们将用Angular在客户端浏览器上跑起来.PS:在正常的开发流程上,我们可能不会在服务器端创建了一个网站,然后又用SPA重建它.但从学习的角度来说这还不错,这样掌握了两种构建方式. 上一节所有Angular相关的代码都在一个js里面,这不便管理和维护,这一

[Angularjs]asp.net mvc+angularjs+web api单页应用

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 写在前面 最近的工作一直在弄一些h5的单页应用,然后嵌入到app的webview中.之前一直在用angularjs+html+ashx的一套东西.实在是玩腻了.然后就尝试通过asp.net mvc的方式构建单页应用.用到的技术angularjs

[Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作

写在前面 前篇文章整理了angularjs学习目录,有园子里的朋友问我要这方面的demo,周末也没什么事,就在之前的单页应用的demo上面添加了增删改查的操作.代码比较简单,这里只列举比较重要的代码片段.完整的代码将在文章下面提供链接. demo 数据来源通过webapi的方式提供.获取对产品的查询,分页,增加商品,删除,修改等操作. webapi using Newtonsoft.Json; using System; using System.Collections.Generic; usi

Angular JS仿拉勾网 WebApp 开发移动端单页应用

课程目录: 第1章 课程介绍讲解课程开发内容和开发流程.前端主流开发框架与AngularJS对比.介绍AngularJS的基本概念.第2章 基础知识介绍介绍单页应用以及AngularJS web app的构成.讲解css预编译语言less的使用.第3章 使用构建工具讲解构建工具gulp.包管理工具bower的使用.编写构建工具配置文件.第4章 实战项目-职位模块实现路由模块ui-router的使用与配置,编写相关页面.指令与控制器,介绍并使用处理异步调用的$q服务与发送http请求的$http服

[Angularjs]单页应用之分页

写在前面 在项目中,用到单页应用的分页,当时想到使用滚动加载的方案,可是几次尝试都没配置成功,闲着无聊就弄了一个demo. 系列文章 [Angularjs]ng-select和ng-options [Angularjs]ng-show和ng-hide [Angularjs]视图和路由(一) [Angularjs]视图和路由(二) [Angularjs]视图和路由(三) [Angularjs]视图和路由(四) [Angularjs]ng-class,ng-class-even,ng-class-o

用AngularJS构建单页应用,根据需求加载JS文件的方法

我们在AngularJS中可以根据网址不同直接切换view,动态加载网页模板,但是控制模板的控制器需要先定义好才可以,不能和网页模板同时加载,这样就造成整个网站的JS都要先加载完成. requireJS是大家第一个想到的东西,但是体积有点大,github上就有个人用它写了Angular的动态加载controller模块,是通过js promise异步编程技术实现的,最后的解决很简单~~ 首先在$routeProvider里面加resolve属性, $routeProvider. when('/p