angular js使用记录

jquery本身并不是框架,而仅仅是一个操作dom的工具,它的核心是操作dom;

目前较火的前端框架:backbone、angularjs、react、avalon、vue;

angularjs是由google开发的框架并进行维护,特别针对SPA(单页面)应用开发的框架,但不支持按需加载;  MV*;

mvvm框架  达到视图与逻辑(模块)同时绑定,同时更新;

1.ng-app——指令,使文档具有angularjs的能力(视图与逻辑混合);

angular的核心就是视图与逻辑的同时绑定、同时更新;

angularjs可以极大地减少dom的操作,但是不影响它与jquery进行混合应用。但是理想的开发,是不希望在angular.js中掺杂jquery代码,因为要保持框架统一性;

angular.js最基础和也是最重要的部分

Directives --》》指令  ng-*

  自定义指令  show = ‘‘; 

Data Binding --》》数据绑定(达到视图与数据同时绑定,极大减少dom操作;)  {{*}}:例如{{name}}在某一控制器模块的作用域下查找;

  核心数据绑定$scope.itemList = itemList;

Filter 通过一个管道进行过滤操作;  name | uppercase  ---->>>----|---->>>数据管道

  <ul ng-repeat="item in carList | num_nice: {num: 5}"></ul>//筛选出数量为5的商品;或者表达为  | filter:{num:5};

  app.filter(‘num_nice‘, function(arr, param) {

      //arr待过滤的数组,parma表示传入的对象;

  });

controller --》》控制层

每个控制层都有自己的作用域,让他们数据绑定相互独立于自己的作用域;

angular三大重要功能:

1.视图实时反应数据的变化,极大减少了dom操作;

2.directive实现组件;(templateUrl属性可以实现异步请求)

3.路由;

————angular的路由配置

 1 var app = angular.module("myTodo", [‘ngRoute‘]);
 2 //路由的配置:
 3 app.config(function($routeProvider) {
 4     //我们在实现I want you项目,自己实现了一个路由,
 5     //在这里angular.js帮我们实现了一个路由
 6
 7     var routeconfig = {
 8         templateUrl: "body.html",  //视图区V
 9         controller: "myTodoCtrl"   //控制区C
10         /*controller: ‘myTodoCtrl‘*/
11     }
12
13     var ohter_config = {
14         templateUrl: "other.html"
15     }
16     //如果路由没有匹配到hash,让它跳到body.html
17     //如果路由器配到的hash是index.html#/all 或者
18     //index.html#/comp  index.html#/status
19     //假设路由器的匹配路径是 index.html#/!/allssssssssss
20     //会匹配失败,会通过otherwise,让它自动重定向到 index.html#/all
21     $routeProvider.
22       when("",routeconfig).
23       //status : 它对应我们页面的hash: all completed active
24       //路由规则的优先级按写法的顺序所决定的
25       when("/other", ohter_config).
26       when("/:status_id", routeconfig ).
27       otherwise( { redirectTo: "/all" });
28 });

————获取本地存储

1 function store(namespace, data) {
2     if(arguments.length > 1) {
3         localStorage.setItem(namespace, JSON.stringify(data));
4     }else {
5         var obj = localStorage.getItem(namespace);
6         return (obj && JSON.parse(obj)) || null
7     }
8 }

————核心数据结构范例

 1 //核心数据结构 ---》
 2 var Coreobj = {
 3     //已完成
 4     completed: false,
 5     title: ‘我是没完成标题‘
 6 }
 7 var sobj = {
 8     completed: true,
 9     title: ‘我是以完成标题‘
10 }
11 var itemList = [];

————控制层C

 1 app.controller("myTodoCtrl", function($scope, $routeParams, $filter){
 2
 3         //$filter --->ng中的过滤器模块,里面有一些定义好的简单方法,可以直接使用
 4         //$scope ---> 控制器中的核心作用域,实现数据与视图绑定功能 —— $scope.variable(变量名)在视图层设置,在控制层进行绑定和逻辑运算;视图层会实时更新变量的变化。
 5         //$routeParams --> 路由器参数
 6         //全局的一个控制层,控制它里面的所有内容,可以进行数据绑定和逻辑操作(各类功能的实现、对数据的操作);
 7         //因为我的myTodo模块绑定在根元素的html上,
 8         //所以该控制层监听页面里的所有内容的作用域
 9         $scope.itemList = store(‘mytodo‘) || itemList;//进行核心数据的绑定,从localStorage中获取myTodo的数据,若不存在则为默认值itemList;
10         $scope.routName = "all";
11         $scope.newTodo = ‘‘;
12                 ...
13         $scope.$on(‘$routeChangeSuccess‘, function () {
14             //使用这个实时监听功能,是有条件,
15             //必须要配置路由器对象,才可以监听路由器的变化。
16             console.log(‘hash值改变了‘);
17             console.log($routeParams.status_id);
18             if($routeParams.status_id === "all") {
19                 $scope.filterStatus = {};
20                 $scope.routName = "all";
21             }else if($routeParams.status_id === "active") {
22                 $scope.filterStatus = {completed:false};
23                 $scope.routName = "active";
24             }else {
25                 $scope.routName = "completed";
26                 $scope.filterStatus = {completed:true};
27             }
28             //该功能可以实时监听该模块作用域下hash值的改变
29         });
30 });        

————指令ng-repeat的使用

item in itemList|filter:filterStatus track by $index//item in itemlist 等同于 item in itemList track by $id(item),而id是不允许重复的.因此需要自定义track by,最简单的方式就是 tack by $index;按照数组的索引值进行执行;

————指令ng-class的使用

<li ng-class="{completed: item.completed, editing: item.edit_status}" ></li>//ng-class中存放的是一个对象,className就是对象的属性.class值为true时,该class就发挥作用,否则就是无效的className;

————ng-model的使用

<input class="toggle" type="checkbox" ng-model="item.completed">//ng-model可以代替input标签的value值的作用,在angular中可以用来实时反应input值的变化,方便数据的传输,而value一般需要获取对应的dom节点;

————各类视图事件相关的指令

<label ng-dblclick="editTodo(item)">{{item.title}}</label>//ng-dbclick双击事件,双引号内为处理双击事件的自定义函数;<button class="destroy" ng-click="remove(item)"></button>//ng-click单击事件
<form ng-submit="saveEdit(item)">//ng-submit表单提交事件
  <input todo-focus="item.edit_status" class="edit" ng-blur="saveEdit(item)" ng-model="item.title">  //ng-blur失去焦点事件
</form>

————组件directive的使用

app.directive(‘todoFocus‘, function(){
    var linkFunction_nice = function(scope, element, attr) {
          //console.log(attr, element);
          scope.$watch(attr.todoFocus, function(newval){
              setTimeout(function(){
                  element[0].focus();
                  //延迟执行,否则无法聚焦
              }, 100);
          });
    };

    return {
      restrict: "A", //暴露的一个元素,若是‘A’则是属性,若是‘E‘则是元素
      link: linkFunction_nice  //link:对特定的元素注册事件;需要用到scope参数来实现dom元素的一些行为;
    };
})//与compile相比较//参考链接://  http://hellobug.github.io/blog/angularjs-directive-2-compile-vs-link/
时间: 2024-10-15 21:12:18

angular js使用记录的相关文章

ptyhon , angular js 学习记录【1】

1.日期格式化 Letter Date or Time Component Presentation Examples G Era designator Text AD y Year Year 1996; 96 M Month in year Month July; Jul; 07 w Week in year Number 27 W Week in month Number 2 D Day in year Number 189 d Day in month Number 10 F Day of

angular JS知识记录

E - 元素名称: <my-directive></my-directive> A - 属性名: <div my-directive="exp"></div> C - class名: <div class="my-directive:exp;"></div> M - 注释 : <!-- directive: my-directive exp -->

python , angular js 学习记录【3】

1.Alembic是SQLAlchemy作者编写的Python数据库迁移工具.用它实现模型类和数据库的同步更新.(安装以及操作步骤 使用Alembic迁移数据库) 使用Alembic添加数据库字段操作流程:切换至db_migrate目录下(1).在model.py里面添加内容(2).运行alembic revision --autogenerate -m "comment内容" 生成数据库迁移文件(3).运行alembic upgrade head 将迁移文件的内容更新到数据库 2.l

对于Angular JS中$apply()的理解

最近在学angularjs知识,在网上找到这篇文章,来自于:http://my.oschina.net/u/1402334/blog/500683,解决了我目前面临的一些问题,感觉收获很大,特此转过来做个记录: Angular最引人注目的特性就是双向绑定,然而它是怎么做到的,我可以来总结两点: 将变化的数据从model传向view-->$apply 将变化的数据从view传向model-->$watch 这连个函数都是基于scope的基础上,对scope对象的成员变化状况进行传播的.那么,我不

带你进入Angular js的大门

首先需要指出什么是angular js,其实说白了angular js就是Javascript的一个类库,我们使用这个类库可以很容易的创建web页面.双向绑定是angular js其中的一个重要特征,这也是相对于其他的Javascript的类库来说angular js中很重要的特征.双向绑定即是当你修改任何属性的值的时候,相关联的html元素也将改变,你并不需要额外的去修改. Angular js还为我们提供了MVVM(Model View ViewModel)的模型.MVVM的意思就是说Mod

angular.js分页代码的实例

对于大多数web应用来说显示项目列表是一种很常见的任务.通常情况下,我们的数据会比较多,无法很好地显示在单个页面中.在这种情况下,我们需要把数据以页的方式来展示,同时带有转到上一页和下一页的功能.现在在学习angular,使用angularjs 分页,基于 directive 实现,样式使用的 bootstrap,直接在 html代码中加入 标签即可调用. 先来看下效果图 实例代码 1 app.directive('pagePagination', function(){ 2 return {

精通 Angular JS 第一天——Angular 之禅

简介 Angular JS是采用JavaScript语言编写的客户端MVC框架,它为业界带了重大的变化,包括对模板化的创新实现,以及数据的双向绑定,这些特性使得它强大而易用.它可以用来帮助开发者编写单页面应用,尤其适合编写有大量CRUD操作的,具有Ajax风格的富客户端应用.大多数开发者认为,与其它框架相比,AngularJS明显缩减了项目所需的代码量. 2012年6月,Angular JS正式发布1.0版,在各种客户端MVC框架中,属于后起之秀.AngularJS主页(http://www.a

青出于蓝而胜于蓝 — Vue.js对Angular.js的那些进步

Angular.js与Vue.js是非常有渊源的两款前端框架,据Vue.js的官方网站描述,在其早期开发时,灵感来源就是Angular.js.而在很多方面,Vue.js也正像是中国的那句古话,"青出于蓝而胜于蓝".今天,K就从下面几个方面来跟大家一起探讨一下,Vue.js到底在哪些方面更"胜于蓝". (一)简单的操作 这是K看来Vue.js最杰出的的方法,Vue.js致力于视图层的展现,这使它在与其他项目进行整合的时候会变得非常easy,这也使它更容易"嵌

Angular JS从入门基础 mvc三层架构 常用指令

Angular JS从入门基础  mvc模型 常用指令 ★ 最近一直在复习AngularJS,它是一款优秀的前端JS框架,已经被用于Google的多款产品当中.AngularJS有着诸多特性,最为核心的是:MVC.模块化.自动化双向数据绑定.语义化标签.依赖注入等等. 1.常用指令 AngularJS 通过指令扩展了HTML,且通过表达式绑定数据到 HTML.下面我们看一下AngularJS中的常用指令. (1).基本概念 指令:AngularJS中,通过扩展HTML的属性提供功能.所以,ng-