angularjs学习笔记--组件、$http、$q、module

1-组件

创建组件,使用angularjs模块的conponent()方法,component(name,options);使用编译器注册组件定义,表示应用程序中的一个独立的UI组件。组件定义通常仅由模板和控制器组成。name为组件名,options为组件定义对象,其属性包括:controller(应该与新创建的作用域相关联的控制器构造函数或作为字符串传递的注册控制器的名称)、controllerAs(用于在组件范围内引用控制器的标识符名称)、template(html模板作为一个字符串或函数返回一个HTML模板作为一个字符串,应该被用作这个组件的内容,默认为空字符串)、templateUrl(路径或函数,返回一个应该用作该组件内容的HTML模板的路径)、bindings(定义DOM属性与组件属性之间的绑定,组件属性始终绑定到组件控制器)、transclude(是否启用内容泄露)、require(要求其他指令的控制器并将其绑定到该组件的控制器)、$...(附加到指令工厂函数和控制器构造函数的附加属性,组件路由器用于注释)

定义组件的例子:
var myMod = angular.module(‘phonecatApp1‘, []);

//1
myMod.component(‘myComp‘,{
    template:‘<div>My name is {{$ctrl.name}}</div>‘,
    controller:function(){
        this.name = ‘shahar‘;
    }
});

//2
myMod.component(‘myComp‘,{
    template:‘<div>My name is {{$ctrl.name}}</div>‘,
    bindings:{name:‘@‘}
});

//3
myMod.component(‘myComp‘,{
   templateUrl:‘views/my-comp.html‘,
   controller:‘MyCtrl‘,
   controllerAs:‘ctrl‘,
   binds:{name:‘@‘}
})

ps:定义组件时其名可以为myComp类似命名的组件,但在HTML 中引入时则需要使用类似<my-comp></my-comp>形式的命名法。

使用组件形式实现ul电话列表:


Component.html文件:
<!DOCTYPE html>
<html lang="en" ng-app="phonecatApp">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../angular/angular.js"></script>
    <script src="../scripts/app1.js"></script>
    <script src="../scripts/component1.js"></script>
</head>
<body>
   <phone-list></phone-list>
</body>
</html>

app1.js:angular.module(‘phonecatApp‘,[]);

component.js:
angular.module(‘phonecatApp‘).component(‘phoneList‘,{
    template:
    ‘<ul>‘ +
        ‘<li ng-repeat = "phone in $ctrl.phones">‘ +
         ‘<span>{{phone.name}}</span>‘ +
         ‘<p>{{phone.snippet}}</p>‘ +
        ‘</li>‘ +
    ‘</ul>‘,
    controller:function PhoneListController(){
        this.phones = [
            {
                name:‘Nexus S‘,
                snippet:‘The Next,Next Generation tablet.‘
            },
            {
                name:‘Motorola XOOM with wifi‘,
                snippet:‘The Next,Next Generation tablet.‘
            },
            {
                name:‘MOTOROLA XOOM‘,
                snippet:‘The Next,Next Generation.‘
            }
        ];
    }
});

  

2--$http

$http({
    url:‘data.json‘,   //可以利用json文件模拟
    method:‘GET‘,
Params:{
  ‘username’:’tan’
}
}).success(function(data,header,config,status){  //响应成功

}).error(function(data,header,config,status){ //处理响应失败

});

  

  // 修改全部消息状态为已读
    function initialize() {
        var deferred = $q.defer();//生成deferred异步对象
        $http({
            url: ‘/api/Message/initialize‘,
            method: ‘POST‘
        }).success(function (result) {
            deferred.resolve(result);
 //执行到这里,改变deferred状态为执行成功,返回result为从后台取到的数据,可以继续执行then、done
        }).error(function (result) {
            deferred.reject(result);
//执行到这里,改变deferred状态为执行失败,返回data为报错,可以继续执行fail
        });
        return deferred.promise;
//起到保护作用,不允许函数外部改变函数体内的deferred状态,控制异步执行完成
    }

Ps:url为绝对或相对的请求目标。params(字符串map或对象),会被转换成查询字符串追加到URL后面,如果不是字符串,将会被json序列化。data这个数据代表转换过后的响应体。status表示响应的HTTP状态码,headers这个函数是头信息的getter函数,可以接受一个参数,用于获取对应名字值。config这个对象用来生成原始请求的完整设置对象。statusText是响应的HTTP状态文本。

ps:

$q用于ajax异步请求数据的回调控制deferred。angularjs中自己封装的一种promise实现。一种内置服务,可以异步执行函数,且当函数完成时或异常时允许使用函数的返回值或返回执行状态通知。

$q常用方法:defer()创建一个deferred对象,该对象可以执行几个常用方法,如resolve、reject、notify等,all()传入promise的数组,批量执行,返回一个promise对象,when()传入一个不确定参数,若符合promise标准就返回一个promise对象。promise中定义的三种状态:完成状态、等待状态、拒绝状态。状态的变更是不可逆的,等待状态可以变成完成或拒绝状态。

promise/deferred:承诺/延迟

promise帮助开发者用同步的方式编写异步的代码。一种对执行结果不确定的一种预先定义,如果成功做什么事,失败做什么事,像是事先给了承诺。

defer,延迟,$defer()可以创建一个defer延迟对象实例,表示将会完成的任务的对象。$q中,使用resolve方法变成完成状态,使用reject方法,变成拒绝状态。

3--module

module是angularjs代码的入口,首先需要声明module,然后才定义angularjs中的其他组件元素,如controller、service、filter、directive、config代码块、run代码块等。

angular.module()可传入三个参数:模块的名称(必选参数,在其他地方可以被其他模块注入或在ngApp指令中声明应用程序主模块)、模块的依赖(本模块需要依赖的其他模块的参数,若此处无声明,则无法在模块中使用依赖模块的任何组件)、模块的启动配置函数(在angularjs config阶段会调用该函数,对模块中的组件进行实例化对象实例之前的特定配置,如$routeProvider配置一样程序的路由信息)。

参考学习并感谢:

https://docs.angularjs.org/tutorial/step_00

http://www.runoob.com/angularjs/angularjs-tutorial.html

时间: 2024-09-29 09:52:53

angularjs学习笔记--组件、$http、$q、module的相关文章

angularjs学习笔记—事件指令

angularjs学习笔记—事件指令 小俞 4.4k 3月30日 发布 推荐 4 推荐 收藏 17 收藏,11.1k 浏览 ngClick 适用标签:所有触发条件:单击 #html <div ng-controller="LearnCtrl"> <div ng-click="click()">click me</div> <button ng-click="click()">click me<

angularjs 学习笔记 -----结构定义

1.  Module使用方法 var APP =angular.module('fontApp',['ngResource', 'ngRoute', 'ngSanitize']); APP为定义的别名,之后的调用都应尽量使用该别名 'fontApp' ng-app="fontApp" 新版本angular中route被分离出来,各个被使用的Providerdou需要在此处声明. 大型应用应该拆分模块来做,先定义一个服务模块,然后再加载它 angular.module('xmpl.ser

AngularJs学习笔记--directive

原版地址:http://code.angularjs.org/1.0.2/docs/guide/directive Directive是教HTML玩一些新把戏的途径.在DOM编译期间,directives匹配HTML并执行.这允许directive注册行为或者转换DOM结构. Angular自带一组内置的directive,对于建立Web App有很大帮助.继续扩展的话,可以在HTML定义领域特定语言(domain specific language ,DSL). 一.在HTML中引用direc

AngularJS学习笔记filter

filter是对数据进行过滤操作,比如按某个字段搜索.格式化数据等等,是一个非常有用的接口.下面就简单介绍下它的用法. AngularJS自带的filter接口,|是filter的分隔符,参数用:分隔: currency,格式化number,货币化,默认是转化成美元  param(number,symbol),返回值将会把数字每3位加一个逗号 <input type="number" ng-model="amount"/> <p>默认美元:{

angularjs 学习笔记(一) -----JSONP跨站访问

1.  下载angular-seed-master-master包,解压缩后将新版本的angularJS文件放入其中. 2.  制作frontmockup文件夹(前端调用),同时制作backmockup文件夹(后端调用),使用IIS开启2个webserver(此步骤可以用其他方式替代). 3.  backmockup站点添加以下HTTP头 Access-Control-Allow-Credentials:true Access-Control-Allow-Headers:origin,x-req

angularjs 学习笔记(二) ----- bootstrap框架

1.  下载新的jquery-1.11.1文件. 2.  下载新的bootstrap文件. 3.  选择流式布局的模板填充入index.html文件. 4.  将top.foot转为nginclude文件 nginclude必须使用$scope对象,因此需要设置一个全局的mainctrl来将字符串或全局变量注入$cope中. $rootScope.global =global; 直接将全局变量global赋值给$rootScope,并且之后的子$Scope会获得继承,静态定义与ctrl分开. 5

-_-#AngularJS学习笔记

AngularJS学习笔记 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <style> .done{display:none} .ignore{color:#999} </style> <ul> <li class="

AngularJs学习笔记--Guide教程系列文章索引

在很久很久以前,一位前辈向我推荐AngularJs.但当时我没有好好学习,仅仅是讲文档浏览了一次.后来觉醒了……于是下定决心好好理解这系列的文档,并意译出来(英文水平不足……不能说是翻译,有些实在是看不懂,希望大家在参观的过程中指出其中的错误).经过1个多月断断续续的努力,终于把Guide里面的文章基本上都弄出来.Guide中的部分章节,由于重复的部分似乎有点多,而且篇幅较短,这里就没有列出来. 文章列表如下: AngularJs学习笔记--bootstrap AngularJs学习笔记--ht

AngularJS 学习笔记 -- 指令(Directive)

AngularJS 指令学习笔记 AngularJS怎样处理指令其实是依赖于指令定义时返回的对象属性的,所以要想深入理解如何定义一个指令,首相需要理解指令定义时各个参数的含义. 完整的AngularJS指令参数 angular.module('app', []) .directive('demoDirective', function (){ // 依据官方规范,指令的定义时应该严格遵循驼峰式命名规则,使用时采用'-'连接单词 return { restrict : String in ['E'