AngularJS是个啥?

诞生于2009年,2012年被google收购,是一个适用于CRUD、SPA等类型应用的前端MVC框架

为什么要使用AngularJS

  • 在涉及数据绑定的操作过程中,经典的做法是用AJAX将数据从服务端取回,接着将数据解析成变量,然后在前端进行字符串的拼接、嵌套,再插入到页面。

  • 低数据量的绑定这样的操作的确无可厚非,但是在数据量庞大的时候(比如需要拼接成百上千行的字符串),这种方式就显得难以执行且不太科学了。

  • 在这样的背景下,AngularJS诞生了,它是一种MVC模式的前端框架,为前后端的数据绑定提供了一套解决方案,并自定义了一套事件标准,使得前后端的数据交互更加的合理化并且高效,利于管理。

构建第一个AngularJS应用

  • 下载AngularJS
    与大部分框架一样,AngularJS有开发版(可读)和压缩版(不可读,用于生产环境),这里我们下载AngularJS的压缩版

https://angularjs.org/
由于目前大部分应用尚未进行Angular2改造,因此这里使用第一代Angular,之后再对Angular2渐进增强

  • 引入AngularJS

<script src="./lib/angular.min.js"></script>
  • 初始化Angular应用管理边界
    给元素加上一个属性ng-app(其实是Angular定义的指令,它声明一个angu的管理边界)

<div ng-app="app"></div>
<!--此div现在受到AngularJS约束-->
  • 调用Angular对象,管理ng-app

angular.module('app',[])//数组代表依赖注入的内容
    • AngularJS将所有api封装到angular对象中

    • 使用angular对象管理边界的时候,要先声明一个angular模块,对这个模块的操作,即是对管理边界的控制

    • 在管理区域内加入内容

    <div ng-app="app">
        {{ 'This is your first Angular App!' }}
    </div>
    • Angular将页面中所有的表达式进行解析,并输出里面的内容

    • Angular不需要在js中声明边界管理模块也可以在页面显示内容

    基本指令

    指令:带有特定功能的自定义属性
    指令格式:ng-command
    基本指令

    • 初始化应用管理边界——ng-app
      定义Angular的应用管理边界,前面已经使用到

    • 初始化数据指令——ng-init
      定义初始化的数据

    <div ng-app="app" ng-init="username='Hello U!'">
        {{ username }}
    </div>

    这个数据可以是除函数外的任意的js数据类型

    <div ng-app="app" ng-init="user={ username: 'Samuel',sayHello: 'Samuel say hello to you!' }; date=[1,2,3,4,5,6,7]">
        {{ user.username }}
        <br>
        {{ user.sayHello }}
        <br>
        今天是星期{{ data[2] }}
    </div>
    • 动态数据模型——ng-model
      它接收页面上动态数据的变化

    <div ng-app="app">
        <input ng-model="text" />
        <span>监听到输入框的变化{{ text }}</span>
    </div>
    • 数据绑定——ng-bind
      将数据绑定到当前元素

    <div ng-app="app" ng-init="username='Samuel'">
        <span ng-bind:"username">
             {{ username }}
        </span>
    </div>

    它与花括号表达式不同,它只能将数据绑定到html内容中(类似innerHTML实现),而花括号表达式可以将数据绑定到任何地方

    <div ng-app="app" ng-init="username='Samuel'>
        <p id="{{ username }}"></p>
    </div>

    PS:ng-model也能实现数据的捆绑,但破坏了规范的分工机制,不提倡

    • 遍历——ng-repeat

    <div ng-app="app" ng-init="datalist=[1,4]">
        <p ng-repeat="$item in datalist">{{ $item }}</p>
    </div>

    遍历datalist,根据遍历的情况生成元素,并且可以在元素中使用遍历到的数据

    控制器 controller

    既然Angular是MVC模式的框架,那么一定有一个controller(C)层面

    控制器的作用:

    1. 监听页面中的请求和行为

    2. 访问处理数据

    3. 将数据同步到view

    控制器关注的部分

    • view

    • css

    • image

    • html

    • js

    插个楼!——$scope
    $scope是angular对象内置服务对象,关联当前ng-app,是ng-controller实现内部数据和事件方法绑定(可以说是托管到$scope上,并通过$scope去调用)的核心对象

    控制器实现步骤:

    1. 声明控制器

    <div ng-app="app" ng-controller="mycontroller"></div>
    1. 通过应用边界管理模块去监听控制器

    //在模块
    var app = angular('app',[]).controller('mycontroller',function() {
        //这里就要使用到$scope来进行数据的控制
        $scope.hostage = "I am a hostage,controlled by Samuel"
        $scope.something = "I am something."
    })

    AngularJS事件

    AngularJS自己定义了一套事件标准,通过指令的形式进行监听
    示例:

    • 单击事件——ng-click
      html:

    <div ng-app="app" ng-controller="mycontroller">
        <button ng-click="sendMessage()">sendMessage</button>
        <span>I'm wating for message.</span>
        <br>
        <span>{{ message }}</span>
    </div>

    js:

    var app = angular.module('app',function() {
        $scope.sendMessage = function() {
            $scope.message = "I\'m message!";
        }
    });

    第一眼,我们看到了:
    AngularJS的核心业务(优势,解决的问题)、使用方式、编程模式(MVC)、基本的数据交互。使得这个强大的框架终于将虚掩的门打开。
    第二眼,就一探究竟吧。

    第一眼——AngularJS的更多相关文章

    1. HTML5 播放 RTSP 视频的实例代码

      目前大多数网络摄像头都是通过 RTSP 协议传输视频流的,但是 HTML 并不标准支持 RTSP 流。本文重点给大家介绍HTML5 播放 RTSP 视频的实例代码,需要的朋友参考下吧

    2. 利用Node实现HTML5离线存储的方法

      这篇文章主要介绍了利用Node实现HTML5离线存储的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    3. 详解如何通过H5(浏览器/WebView/其他)唤起本地app

      这篇文章主要介绍了详解如何通过H5(浏览器/WebView/其他)唤起本地app的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    4. H5混合开发app如何升级的方法

      本篇文章主要介绍了H5混合开发app如何升级的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    5. AmazeUI 折叠面板的实现代码

      这篇文章主要介绍了AmazeUI 折叠面板的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    6. HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码

      这篇文章主要介绍了HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

    7. Html5 video标签视频的最佳实践

      这篇文章主要介绍了Html5 video标签视频的最佳实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    8. html5唤起app的方法

      这篇文章主要介绍了html5唤起app的方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    9. HTML5拍照和摄像机功能实战详解

      这篇文章主要介绍了HTML5拍照和摄像机功能实战详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    10. ios – 在没有iPhone6s或更新的情况下测试ARKit

      我在决定下载Xcode9之前.我想玩新的框架–ARKit.我知道要用ARKit运行app我需要一个带有A9芯片或更新版本的设备.不幸的是我有一个较旧的.我的问题是已经下载了新Xcode的人.在我的情况下有可能运行ARKit应用程序吗?那个或其他任何模拟器?任何想法或我将不得不购买新设备?解决方法任何iOS11设备都可以使用ARKit,但是具有高质量AR体验的全球跟踪功能需要使用A9或更高版本处理器的设备.使用iOS11测试版更新您的设备是必要的.

    随机推荐

    1. Angular2 innerHtml删除样式

      我正在使用innerHtml并在我的cms中设置html,响应似乎没问题,如果我这样打印:{{poi.content}}它给了我正确的内容:``但是当我使用[innerHtml]=“poi.content”时,它会给我这个html:当我使用[innerHtml]时,有谁知道为什么它会剥离我的样式Angular2清理动态添加的HTML,样式,……

    2. 为Angular根组件/模块指定@Input()参数

      我有3个根组件,由根AppModule引导.你如何为其中一个组件指定@input()参数?也不由AppModalComponent获取:它是未定义的.据我所知,你不能将@input()传递给bootstraped组件.但您可以使用其他方法来做到这一点–将值作为属性传递.index.html:app.component.ts:

    3. angular-ui-bootstrap – 如何为angular ui-bootstrap tabs指令指定href参数

      我正在使用角度ui-bootstrap库,但我不知道如何为每个选项卡指定自定义href.在角度ui-bootstrap文档中,指定了一个可选参数select(),但我不知道如何使用它来自定义每个选项卡的链接另一种重新定义问题的方法是如何使用带有角度ui-bootstrap选项卡的路由我希望现在还不算太晚,但我今天遇到了同样的问题.你可以通过以下方式实现:1)在控制器中定义选项卡href:2)声明一个函数来改变控制器中的散列:3)使用以下标记:我不确定这是否是最好的方法,我很乐意听取别人的意见.

    4. 离子框架 – 标签内部的ng-click不起作用

      >为什么标签标签内的按钮不起作用?>但是标签外的按钮(登陆)工作正常,为什么?>请帮我解决这个问题.我需要在点击时做出回复按钮workingdemo解决方案就是不要为物品使用标签.而只是使用divHTML

    5. Angular 2:将值传递给路由数据解析

      我正在尝试编写一个DataResolver服务,允许Angular2路由器在初始化组件之前预加载数据.解析器需要调用不同的API端点来获取适合于正在加载的路由的数据.我正在构建一个通用解析器,而不是为我的许多组件中的每个组件设置一个解析器.因此,我想在路由定义中传递指向正确端点的自定义输入.例如,考虑以下路线:app.routes.ts在第一个实例中,解析器需要调用/path/to/resourc

    6. angularjs – 解释ngModel管道,解析器,格式化程序,viewChangeListeners和$watchers的顺序

      换句话说:如果在模型更新之前触发了“ng-change”,我可以理解,但是我很难理解在更新模型之后以及在完成填充更改之前触发函数绑定属性.如果您读到这里:祝贺并感谢您的耐心等待!

    7. 角度5模板形式检测形式有效性状态的变化

      为了拥有一个可以监听其包含的表单的有效性状态的变化的组件并执行某些组件的方法,是reactiveforms的方法吗?

    8. Angular 2 CSV文件下载

      我在springboot应用程序中有我的后端,从那里我返回一个.csv文件WheniamhittingtheURLinbrowsercsvfileisgettingdownloaded.现在我试图从我的角度2应用程序中点击此URL,代码是这样的:零件:服务:我正在下载文件,但它像ActuallyitshouldbeBook.csv请指导我缺少的东西.有一种解决方法,但您需要创建一个页面上的元

    9. angularjs – Angular UI-Grid:过滤后如何获取总项数

      提前致谢:)你应该避免使用jQuery并与API进行交互.首先需要在网格创建事件中保存对API的引用.您应该已经知道总行数.您可以使用以下命令获取可见/已过滤行数:要么您可以使用以下命令获取所选行的数量:

    10. angularjs – 迁移gulp进程以包含typescript

      或者我应该使用tsc作为我的主要构建工具,让它解决依赖关系,创建映射文件并制作捆绑包?

    返回
    顶部