zoukankan      html  css  js  c++  java
  • AngularJs我的学习整理(不定时修改)

      最近一月份的日子,学习了AngularJs,还只是刚刚入门而已。了解了基本的语法规则以及很简单的应用。仔细想想,学习AngularJs的时间大概半个月的时间,每天花在AngularJs上两三个小时。

    在短短的学习入门时间,也想简简单单地做一个阶段性的总结。下一次的学习应该是进阶。计划准备在NodeJs入门之后进阶AngularJs和NodeJs。

    AngularJs是什么东东?

      AngularJS 使得开发现代的单一页面应用程序变得更加容易(单一页面应用程序SPAs:Single Page Applications),是一个JavaScript框架,有版本1和版本2.目前我学习的是1版本,版本2与之前的版本是完全不同,学习起来可能会很诡异。

     

      AngularJs通过指令扩展了 HTML,且通过表达式绑定数据到 HTML。总结一下最近比较常用到的指令以及作用:

    • ng-directives 扩展了 HTML
    • ng-app 指令定义一个 AngularJS 应用程序。
    • ng-model 指令把元素值(比如输入域的值)绑定到应用程序。
    • ng-bind 指令把应用程序数据绑定到 HTML 视图

      那个时候刚刚开始学,然后犯了一个小错误,但足够说明白ng-app的重要性:

    <div ng-app="" ng-init="firstname='SliyCat'">

      <p>Hi<span ng-bind="firstname"></span></p>

    </div>

      在ng-app的中间多了敲了一个空格,以致表达式不能够绑定到span元素上。因为ng-app是定义一个应用程序,如果ng-app中的内容错了,那么表达式自然也不能绑定。

    什么是AngularJs表达式?

        AngularJs的表达式{{expression}},和ng-bind相似,其中可以包含文字、运算符和变量。例如{{5+5}}{{firstname}}。上述的例子也可以写为:

    <div ng-app="" ng-init="firstname='SliyCat'">

      <p>Hi<span>{{ firstname }}</span></p>

    </div>

        AngularJS 表达式   VS JavaScript 表达式

    1. 类似于JavaScript表达式,AngularJS 表达式可以包含字母,操作符,变量
    2. AngularJS 表达式可以写在 HTML 中,但不支持不支持条件判断,循环及异常,支持支持过滤器。

    一些关于AngularJs指令

             学习AngularJs的一个明显的特点是有比较多的指令。在初步学习中学到了一些比较常见的指令,还不是特别齐全,如果要查看全部的指令,建议百度资源。

           ng-init 指令

             这个指令用来初始化AngularJS 应用程序变量。来个截图!图中的代码初始化了price和num。初始化的对象是ng-model中的变量。

      • 针对HTML5的页面可以使用data-ng-bind的前缀data-ng-***(H5的自定义属性的前缀是data-
      •  ng-init用于比较简单的程序,最好能够在控制器中初始化。
      ng-repeat指令

      该指令会重复一个HTML元素。用在列表中十分方便输出,与它类似的指令是ng-options。两者的功能大同小异。后面说道ng-options指令。

    输出数组或者是对象都可以。不过输出对象的时候要注意写法,曾经马虎过几次,就是xxx.xxx记得那个点。也可以使用过滤器,给输出的元素排序什么的。

      AngularJS 过滤器可以使用一个管道字符(|)添加到表达式和指令中。AngularJS 过滤器可用于转换数据

    什么是管道字符???这个我还没有找到准确的答案。

      

      ng-model 指令
    • 为应用程序数据提供类型验证(number、email、required)
    • 为应用程序数据提供状态(invalid、dirty、touched、error)
    • 为 HTML 元素提供 CSS 类
    • 绑定HTML元素到HTML表单

      其实上面的列表的看起来有些难以理解,用起来就觉得挺好用的。常用的地方就是input输入框。

      

    1. 用于绑定应用程序数据到 HTML 控制器(input, select, textarea)的值
    2. 可以为应用数据提供状态值(invalid, dirty, touched, error)?
    3. 根据表单域的状态添加/移除以下类:ng-empty,ng-not-empty,ng-touched,ng-untouched,ng-valid,ng-invalid,ng-dirty,ng-pending,ng-pristine

      按照我的理解,只能到第二点,第三点我暂时还没有用过。第二点超级有用,实施效果很好,能够及时验证表单信息。

      ng-options指令

      使用 ng-options 创建选择框,列表项通过对象和数组循环输出。

      <select ng-model="shop" ng-options="x for x in shopping" ng-init="shop= shopping[0]"></select>

      ng-repeat指令是通过数组来循环 HTML 代码来创建下拉列表,但ng-options指令更适合创建下拉列表.使用 ng-options 的选项的一个对象,而ng-repeat 是一个字符串。

      ng-repeat 指令可以完美的显示表格。 $index能够显示序号,可以使用这个特性。

    创建自定义指令

    这个在学习过程中用得比较少,可能还没有到进阶的地步。感觉自定义这类型的功能会很热门。不过我暂时也没有用到很多地方。

    .directive 函数来添加

    restrict 值可以是以下几种:

    E 作为元素名使用

    A 作为属性使用

    C 作为类名使用

    M 作为注释使用

    restrict 默认值为 EA, 即可以通过元素名和属性名来调用指令。

    AngularJS Scope(作用域)

      Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带。

      scope就是属于模型这个区域。

      根作用域:所有的应用都有一个 $rootScope,它可以作用在 ng-app 指令包含的所有 HTML 元素中。$rootScope 可作用于整个应用中。是各个 controller 中 scope 的桥梁。用 rootscope 定义的值,可以在各个 controller 中使用。

    AngularJS 控制器 控制 AngularJS 应用程序的数据,是js的对象,由标准的 JavaScript 对象的构造函数创建

    在大型的应用程序中,通常是把控制器存储在外部文件中。这句话的意思就是,引入外部文件***.js,把控制器写在外部文件,形成代码分离。

    AngularJS 服务(Service)

    在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用。

    在菜鸟教程中,提到的服务有$location,$http,$interval

             什么东西都要有一个自定义才好玩嘛。于是,这个也有自定义服务:

    创建名为hexafy 的访问:

    app.service('hexafy', function() {

        this.myFunc = function (x) {

            return x.toString(16);

        }

    });

    创建完了以后在控制器中调用,调用的时候是不带$符号,我觉得是内部服务是需要带上$,而自定义服务是不用带$的。

    app.controller('myCtrl', function($scope, hexafy) {

        $scope.hex = hexafy.myFunc(255);

    });

     

    $scope.theTime = new Date().toLocaleTimeString();

    该语句的意思是:得到一个时间

    $http 是 AngularJS 中的一个核心服务,用于读取远程服务器的数据

    $http.get(url) 是用于读取服务器数据的函数

    读取数据库

             关于读取数据库这方面,我可能还是不熟练,可能没有机会练习,我觉得应该找些实例来练习练习。

             读取数据库中的数据:

    <script>

    var app = angular.module('myApp', []);

    app.controller('customersCtrl', function($scope, $http) {

        $http.get("http://www.runoob.com/try/angularjs/data/Customers_MySQL.php")

        .success(function (response) {$scope.names = response.records;});

    });

    </script>

    从数据库中读取到的数据都是以JSON的格式返回。JSON之前学过,所以能够懂一些。获取到数据库之后,可以用ng-repeat和ng-options指令得到表格。

    AngularJS 模块

             在模块定义中 [] 参数用于定义模块的依赖关系。

    中括号[]表示该模块没有依赖,如果有依赖的话会在中括号写上依赖的模块名字。之后的动画模块以及AngularJs路由都会用到这个知识点。函数会影响到全局命名空间,需要注意的是,JavaScript 中应避免使用全局函数。因为他们很容易被其他脚本文件覆盖

    AngularJS 表单

    AngularJS 表单是输入控件的集合

    input select button textarea元素被称为HTML控件。目前有四个。我觉得比较常用的是input和select这两个。

    在表单这一方面,AngularJs有比较强的验证,虽然简单,但是这个功能还是挺好的。

    AngularJS 输入验证

      • $dirty                 表单有填写记录
      • $valid                 字段内容合法的
      • $invalid             字段内容是非法的
      • $pristine           表单没有填写记录

     

      验证的代码这方面我目前来说还是很不熟练,需要多加练习才行,因为有些时候会用错。

    AngularJs几个知识点

    1)AngularJS HTML DOM

      1. ng-disabled 指令直接绑定应用程序数据到 HTML 的 disabled 属性
      2. ng-show 指令隐藏或显示一个 HTML 元素(true or false)
      3. ng-hide 指令用于隐藏或显示 HTML 元素。

    我比较有疑问的就是:ng-show 和ng-hide隐藏或者显示的实质是什么???有什么不同的地方吗?到目前为止我发现就是参数不同,方向相反而已。是不是像HTML属性那些不一样的呢???

    2)AngularJS 全局 API

    全局API用于执行常见任务的 JavaScript 函数集合,比如:比较对象,迭代对象,转换对象

    通用的 API 函数:

    a)         angular.lowercase()

    b)         angular.uppercase()

    c)         angular.isString()

    d)         angular.isNumber()

    3) AngularJS 的首选样式表是Bootstrap

    4)还有一个就是跨域问题。这行问题我最怕了。在学习Ajax的时候就觉得有些难学,可能是没有练习吧。

    AngularJS 动画

             刚刚开始的时候我觉得动画好像网站上的内容挺少的,然后误以为动画不是很重要,想直接跳过,后来一百度,发现,AngularJs中动画还是挺重要的,所以还是需要好好学习。

             使用动画需要引入angular-animate.min.js 库。还需在应用中使用模型

    ngAnimate:<body ng-app="ngAnimate">

    ngAnimate 模型可以添加或移除 class 。但并不能使 HTML 元素产生动画,但是 ngAnimate 会监测事件,类似隐藏显示 HTML 元素 ,如果事件发生 ngAnimate 就会使用预定义的 class 来设置 HTML 元素的动画。

     

      在使用transition时,把它的属性忘得长不多,所以搞得有点久。这个例子说的是,一个复选按钮,如果点击按钮,方块就会隐藏起来。当然,如果css属性设置得不一样,它隐藏的动画效果也就不一样。可以直接在body里面定义ng-app="ngAnimate",也可以在脚本代码中定义,两个都可以有。

    依赖注入

             AngularJS 提供很好的依赖注入机制。以下5个核心组件用来作为依赖注入:

      • value
      • factory
      • service
      • provider
      • constant

    Value 是一个简单的 javascript 对象,用于向控制器传递值(配置阶段);factory 是一个函数用于返回值。在 service 和 controller 需要时创建。通常我们使用 factory 函数来计算或返回值;provider 创建一个 service、factory等(配置阶段);provider 中提供了一个 factory 方法 get(),它用于返回 value/service/factory;constant(常量)用来在配置阶段传递数值,注意这个常量在配置阶段是不可用的

    依赖注入式AngularJS的重要特性之一,依赖注入简化了Angular解析模块/组件之间依赖的过程。

    在学习到依赖注入的时候,同时学习到了什么是耦合,什么是解耦,收集了几个网址,还是挺有助于理解。http://blog.csdn.net/jaytalent/article/details/50986402

    AngularJS 路由

             AngularJS 路由允许我们通过不同的 URL 访问不同的内容。

    AngularJS 模块的 config 函数用于配置路由规则。通过使用 configAPI,我们请求把$routeProvider注入到我们的配置函数并且使用$routeProvider.whenAPI来定义我们的路由规则。$routeProvider 为我们提供了 when(path,object) & otherwise(object) 函数按顺序定义所有路由,函数包含两个参数:第一个参数是 URL 或者 URL 正则规则,第二个参数是路由配置对象。

    在使用路由的时候,需要引入angular-route.js。这个可以去网上下载。之前对比了一下网站的教程,自己写的东东总是有一个诡异的bug,后来找了挺长时间的,发现是版本问题,晕倒。。。路由这方面,除了网站的例子,我暂时还没有发现可以用在哪里。希望接下来的学习可以深入去了解一些东东。

     

    学习上需要在二月份解决的问题汇总

    • demo25 AngularJs的路由知识点
    • demo23 AngularJs依赖注入
    • css中的transition属性
    • 表单验证需要多练习
    • 如何为一下代码有个一个初始化值

    <select ng-model="shop1" ng-options="x.site for x in saleshop" ng-init="shop1=saleshop[0].site"></select>

    <p>选择了{{shop1.site}}</p>

    <p>URL is :{{shop1.url}}</p>

    <hr>

    <p>使用对象作为

    数据源, x为键(key), y为值(value)</p>

    <select ng-model="shop2" ng-options="x for (x,y) in sites"></select>

    <h2>{{shop2}}</h2>

    • 数据库以及跨域问题
  • 相关阅读:
    int ,long , long long类型的范围
    距离统计 CH Round #49
    A1087. 高精度加法
    NOIP2010 提高组 机器翻译
    maven学习笔记
    logback学习资料
    UTF8带BOM和不带BOM(转载)
    java IO存在问题
    01——java IO流
    C++网络爬虫设计与分析
  • 原文地址:https://www.cnblogs.com/synchronize/p/6358221.html
Copyright © 2011-2022 走看看