AngularJS 的使用进阶(一)

之前有写一篇文章介绍了 AngularJS 的简单使用,只是写了一些AngularJS的简单用法,经过一段时间的学习,这里总结了一些 AngularJS 的进行一些进阶使用。(这里的实例均使用angularJS 1.4.6版本)
功能介绍和使用
这里对要使用的 AngularJS 功能进行一些介绍:

  • AngularJS 的指令
    AngularJS 通过被称为 “指令”的新属性来扩展 HTML,来为应用添加功能,并且 AngularJS 也允许自定义指令。指令都有前缀 ng-,如:
    ng-app 指令初始化一个 AngularJS 应用程序;
    ng-init 指令初始化应用程序数据;
    ng-model 指令把元素值(比如输入域的值)绑定到应用程序。
    完整的指令内容可以参阅 AngularJS 参考手册

  • AngularJS 的模板
    AngularJS的模板使用的是DOM而不是字符串,模板仍然是用HTML字符串写的,并且它仍然是HTML。浏览器将它解析成DOM, 然后这个DOM会作为输入传递给模板引擎,也就是我们的编译器。编译器查看其中的指令,找到的指令后,会开始监视指令内容中相应的模型。 这样视图就能"连续地"更新,不需要模板和数据的重新合并。AngularJS 通过 ng-model 指令绑定应用程序数据到 HTML 控制器(如input, select, textarea)的值,这种绑定是相互的,在修改输入域的值时, AngularJS 属性的值也会被修改;修改AngularJS 属性的值也将修改输入域的值。

  • AngularJS 控制器
    即控制 AngularJS 应用程序的数据,AngularJS 通过
    ng-controller 指令定义应用程序控制器,控制器由标准的 JavaScript 对象的构造函数 创建。

  • AngularJS 的 Scope(作用域)
    Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带。Scope 是一个对象,有可用的方法和属性,可以应用在 HTML 视图和控制器上,使用 $scope 调用其中的方法和属性。
    代码示例:

<!--ng-app 声明 AngularJS 名字,ng-controller 声明了 控制器-->
<div ng-app="myApp" ng-controller="myCtrl">
<!--ng-model 将 input 的输入值 同 $scope.name 互相绑定-->
    名字: <input ng-model="name">
</div>
<!--此处为 AngularJS 的主要程序代码-->
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
    $scope.name = "John Doe";
});
</script>
  • AngularJS 过滤器
    AngularJS 过滤器可用于处理数据,如格式化数据,排列数组等。过滤器可以通过一个管道字符(|)和一个过滤器添加到表达式中。.
    如下,内置的过滤器:
    • currency: 格式化数字为货币格式。
    • filter :从数组项中选择一个子集。
    • lowercase: 格式化字符串为小写。
    • orderBy: 根据某个表达式排列数组。
    • uppercase: 格式化字符串为大写。

示例代码:

  • 使用内置的过滤器:
<p>姓名为 {{ lastName | lowercase }}</p>
<p>货币为 {{ currency | currency }}</p>
<p>输入过滤:</p>
<p><input type="text" ng-model="test"></p>
<ul>
  <li ng-repeat="x in names | filter:test | orderBy:'country'">
    {{ (x.name | uppercase) + ', ' + x.country }}
  </li>
</ul>
</div>
<script>
    var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
    $scope.lastName = "John Doe";
    $scope.currency = 11111;
    $scope.names = [
        { 'name':'KAI','country':'Denmark'},
        { 'name':'JANI','country':'Norway'},
        { 'name':'HEGE','country':'Sweden'}
    ];
    
});
</script>

运行结果:

AngularJS-filter.PNG

输入过滤条件结果:


AngularJS-filter1.PNG

  • 使用自定义过滤器 reverse (功能是将字符串倒着输出):
<div ng-app="myApp" ng-controller="myCtrl">

<p>原姓名:{{msg}}</p>
<!-- 使用自定义的过滤器 : reverse  -->
<p>姓名: {{ msg | reverse }}</p>

</div>

<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
    $scope.msg = "Runoob";
});
//创建自定义的过滤器 - reverse
app.filter('reverse', function() { //可以注入依赖
    return function(text) {
          //将字符串 text 内容倒置
        return text.split("").reverse().join("");
    }
});
</script>

运行结果:


AngularJS-自定义filter.PNG

  • AngularJS服务
    在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用。这些服务可以获取到Angular应用声明周期的每一个阶段,并且和$watch整合,让Angular可以监控应用,处理事件变化。普通的DOM对象则不能在Angular应用声明周期中和应用整合。AngularJS 内建了30 多个服务详见官网 API( 以下示例代码使用 $location 服务,它可以返回当前页面的 URL 地址)。当然 AngularJS 也支持创建自定义的服务。
    示例代码:
<div ng-app="myApp" ng-controller="myCtrl">
<p> 当前页面的url:</p>
<h3>{{myUrl}}</h3>
</div>
<p>该实例使用了内置的 $location 服务获取当前页面的 URL。</p>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $location) {
    $scope.myUrl = $location.absUrl();
});
</script>

运行结果:


AngularJS-service-location.PNG

自定义服务:

<div ng-app="myApp" ng-controller="myCtrl">
<p>255 的16进制是:</p>
<h1>{{hex}}</h1>
</div>
<p>自定义服务,用于转换16进制数:</p>
<script>
var app = angular.module('myApp', []);
//自定义服务-hexafy,数据转换成16 进制
app.service('hexafy', function() {
    this.myFunc = function (x) {
        return x.toString(16);
    }
});
app.controller('myCtrl', function($scope, hexafy) {
//自定义服务-hexafy
  $scope.hex = hexafy.myFunc(255);
});
</script>
  • AngularJS $http
    $http 是 AngularJS 中内置的一个核心服务,用于读取远程服务器的数据。使用该$http可以发起get 或者 post 请求。
    使用方法:
// 简单的 GET 请求,可以改为 POST
$http({
    method: 'GET',//post 请求改为‘POST’
    url: '/someUrl'
}).success(function successCallback(response) {
        // 请求成功执行代码
    }).error(function() {
            // 请求失败执行代码
        });
//注意:此处使用的版本是AngularJS 1.4.6,在AngularJS 1.5中$http 的 success 和 error 方法已废弃。使用 then 方法替代。使用格式如下:
/*
// 简单的 GET 请求,可以改为 POST
$http({
    method: 'GET',
    url: '/someUrl'
}).then(function successCallback(response) {
        // 请求成功执行代码
    }, function errorCallback(response) {
        // 请求失败执行代码
});
*/

除了上面的方法,AngularJS 还提供了很多简单写法:
POST 与 GET 简写方法格式:
$http.get('/someUrl', config).then(successCallback, errorCallback);
$http.post('/someUrl', data, config).then(successCallback, errorCallback);
更多简写方式可参见:https://docs.angularjs.org/api/ng/service/$http

除此之外,使用 $http 还可以读取 JSON 文件
以下是存在本地的JSON 文件:

[
    {"id":1,"work_name":"楚乔传","upload_state":"是"},
    {"id":2,"work_name":"楚乔传","upload_state":"是"}
]

代码示例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.bootcss.com/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>
<div ng-app="myApp" ng-controller="myCtrl"> 
<ul>
  <li ng-repeat="item in datas">
    {{item.work_name + ',' + item.upload_state}}
  </li>
</ul>
</div>
<script>
var app = angular.module('myApp', []);
//json 文件路径
var url1="../conf/datalist.json";
app.controller('myCtrl', function($scope, $http) {
    $http.get(url1).success(function (response) {
        $scope.datas = response;
    });
});
</script>
</html>

运行结果:

AngularJS-http.PNG

总结

此处暂时就写这几个功能,AngularJS 还有很多实用的功能,待到以后在继续写。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • AngularJS是什么?AngularJs(后面就简称ng了)是一个用于设计动态web应用的结构框架。首先,它是...
    200813阅读 1,568评论 0 3
  • 通过AngularJS仿豆瓣一刻的案例:https://github.com/zhongxiaolian/doub...
    中小恋阅读 1,745评论 1 21
  • ng-model 指令ng-model 指令 绑定 HTML 元素 到应用程序数据。ng-model 指令也可以:...
    壬万er阅读 857评论 0 2
  • 简介: AngularJS 是一个 JavaScript 框架。它可通过 标签添加到 HTML 页面。 Ang...
    JenniferYe阅读 1,413评论 0 13
  • AngularJS AngularJS概述 介绍 简称:ng Angular是一个MVC框架 其他前端框架: Vu...
    我爱开发阅读 2,327评论 0 8