(三)Angularjs - 入门(2)

AngularJS AJAX

AngularJS提供了$http控制,可以用来获取服务器端的数据。服务器通过一个数据库的读取操作来获取需要的数据。注意AngularJS需要JSON格式的数据。一旦数据准备完毕,$http可以使用如下代码获取数据:

1   //后台提供的ajax数据提供url
2   var url="http://cdn.gbtags.com/gblibraryassets/libid102/jsondata.jsp";
3
4   //使用http get方法获取数据,并且使用回调函数设置到students中
5   $http.get(url).success(function(response) {
6     $scope.students = response;
7   });

说明:

jsondata.jsp提供了后台的JSON数据$http服务器

通过一个ajax调用将http响应中的数据添加到正确的students中

students模型绘制数据到HTML页面的数据表里。

AngularJS 视图配置

AngularJS提供了ng-view和ng-template声明指令,和$routeProvider服务

ng-view 声明指令

ng-view主要用来创建一个可以展示页面对应生成视图的区域,这些视图可以使用配置方式生成

在主模块中定义一个ng-view的div,如下:

<div ng-app="mainApp">
...
   <div ng-view></div>
...
</div>   

ng-template 声明指令

ng-template通过script标签来创建生成的HTML视图内容。包含了id属性,$routeProvider使用这个属性用来映射视图到对应的控制器

主模块中定义一个script区域作为ng-template

<div ng-app="mainApp">
...
  <!-- 定义视图相关模板 -->
  <script type="text/ng-template" id="add.htm">
    <h2> 添加操作 </h2>
      {{message}}
  </script>
  <script type="text/ng-template" id="view.htm">
    <h2> 阅读操作 </h2>
      {{message}}
  </script>    

</div>    

$routeProvider服务

$routeProvider是一个关键服务,用来设置URL相关配置,映射到对应的HTML页面或者ng-template,并且绑定到指定控制器

<div ng-app="mainApp" class="ng-scope">

  <!-- 定义两个视图操作 -->
  <p><a href="#add">添加</a></p>
  <p><a href="#view">阅读</a></p>
  <p><a href="#undefine">其它</a></p>

  <hr class="clearfix">

  <!-- 定义视图 -->
  <!-- ngView:  --><div ng-view="" class="ng-scope">
    <h2 class="ng-scope"> +添加操作 </h2><span class="ng-binding ng-scope">
      这里演示视图的添加操作
  </span></div>

  <!-- 定义视图相关模板 -->
  <script type="text/ng-template" id="add.htm">
    <h2> +添加操作 </h2>
      {{message}}
  </script>

  <script type="text/ng-template" id="view.htm">
    <h2> #阅读操作 </h2>
      {{message}}
  </script>
</div>
 1 var mainApp = angular.module("mainApp", [‘ngRoute‘]);
 2
 3 //$routeProvider用来设置URL相关配置,映射到对应的HTML页面或者ng-template,并且绑定到指定控制器
 4 mainApp.config([‘$routeProvider‘,
 5                 function($routeProvider) {
 6                   $routeProvider.
 7                     when(‘/add‘, {
 8                       templateUrl: ‘add.htm‘,
 9                       controller: ‘AddController‘
10                     }).
11                     when(‘/view‘, {
12                       templateUrl: ‘view.htm‘,
13                       controller: ‘ViewController‘
14                     }).
15                     otherwise({
16                       redirectTo: ‘/add‘
17                     });
18                 }]);
19
20 mainApp.controller(‘AddController‘, function($scope) {
21   $scope.message = "这里演示视图的添加操作";
22 });
23
24 mainApp.controller(‘ViewController‘, function($scope) {
25   $scope.message = "这里演示视图的阅读操作";
26 });

说明:

$routeProvider在mainApp模块中使用‘$routeProvider‘关键字定义了一个方法

$routeProvider定义了一个URL“/add”,用来映射到"add.htm"。add.htm也可以展现到主HTML页面中。如果HTML页面没有定义,那么ng-template需要在id="add.htm"中被使用。

如果没有其它的视图定义,那么otherwise将设置缺省的视图,即“add.htm”

AngulaJS 服务

AngularJS使用服务架构来支持关键点分离的概念。服务是Javascript方法,用来执行特定的功能。这样生成独立的单元,方便测试和维护。控制器根据需要可以调用需要的服务。服务通常使用以来注入方式导入。

AngularJS提供了很多内建的服务,例如,$http,$route,$window,$location等等。每一个服务都对应一个指定的方法。例如$http用来创建服务器端AJAX调用,$route用来定义相关路由信息等等。所有的服务都使用$符号开始。

两种方式创建服务

  • 工厂方法(Factory)
  • 服务方法(Service)

使用工厂方法

这里我们定义一个工厂,并且添加方法:

1 var mainApp = angular.module("mainApp", []);
2       mainApp.factory(‘MathService‘, function() {
3          var factory = {};
4          factory.multiply = function(a, b) {
5             return a * b
6          }
7          return factory;
8       }); 

使用服务方法

这里定义一个服务,并且赋予方法。我们也可以注入已经存在的服务

1 mainApp.service(‘CalcService‘, function(MathService){
2     this.square = function(a) {
3         return MathService.multiply(a,a);
4     }
5 });

完整代码:

<div ng-app="mainApp" ng-controller="CalcController" class="ng-scope">
  <p>输入一个数值: </p>
  <p><input type="number" ng-model="number" class="ng-valid ng-valid-number ng-dirty"></p>
  <button ng-click="square()">计算平方 X<sup>2</sup></button>
  <p class="ng-binding">计算结果: </p>
</div>
 1 mainApp.factory(‘MathService‘, function() {
 2   var factory = {};
 3   factory.multiply = function(a, b) {
 4     return a * b
 5   }
 6     return factory;
 7 });
 8
 9 mainApp.service(‘CalcService‘, function(MathService){
10   this.square = function(a) {
11     return MathService.multiply(a,a);
12   }
13 });
14
15 mainApp.controller(‘CalcController‘, function($scope, CalcService) {
16   $scope.square = function() {
17     $scope.result = CalcService.square($scope.number);
18   }
19 });

AngularJS 依赖注入

依赖注入是一个软件设计思想,代表组件间提供依赖而非硬编码。依赖于定位依赖并且让组件可配置。这种方式可以帮助组件重用,高可维护并且可测试。

AngularJS提供了超棒的依赖注入机制。提供如下核心组件用来作为依赖注入:

  • Value
  • Factory
  • Service
  • Provider
  • Constant
  • value

value

value是一个简单的JS对象,在配置阶段用来传递数值到控制器

 1 //定义模块
 2 var mainApp = angular.module("mainApp", []);
 3 //创建一个数值对象作为缺省的输入
 4 mainApp.value("defaultInput", 5);
 5 ...
 6 //使用缺省名字"defaultInput"注入值到控制器
 7 mainApp.controller(‘CalcController‘, function($scope, CalcService, defaultInput) {
 8       $scope.number = defaultInput;
 9       $scope.result = CalcService.square($scope.number);
10
11       $scope.square = function() {
12       $scope.result = CalcService.square($scope.number);
13    }
14 });

Factory

一个用来返回值的方法。一旦服务或者控制器需要就创建了一个需要的值。这里使用工厂方法计算并且返回值

 1 //定义模块
 2 var mainApp = angular.module("mainApp", []);
 3 //创建工厂"MathService",提供一个方法来生成平方
 4 mainApp.factory(‘MathService‘, function() {
 5    var factory = {};
 6    factory.multiply = function(a, b) {
 7       return a * b
 8    }
 9    return factory;
10 });
11
12 //注入工厂“MathService”到服务,并且多次使用这个方法
13 mainApp.service(‘CalcService‘, function(MathService){
14       this.square = function(a) {
15       return MathService.multiply(a,a);
16    }
17 });

Service

一个单例的Javascript对象,包含了一系列的方法执行特定任务。Service是使用service方法定义,并且注入到控制器

//定义模块
var mainApp = angular.module("mainApp", []);
...
//创建一个包含square方法的服务
mainApp.service(‘CalcService‘, function(MathService){
      this.square = function(a) {
      return MathService.multiply(a,a);
   }
});
//注入服务"CalcService"到控制器
mainApp.controller(‘CalcController‘, function($scope, CalcService, defaultInput) {
      $scope.number = defaultInput;
      $scope.result = CalcService.square($scope.number);

      $scope.square = function() {
      $scope.result = CalcService.square($scope.number);
   }
});

 

时间: 2024-08-10 22:12:30

(三)Angularjs - 入门(2)的相关文章

angularjs入门学习【指令篇】

一.首先我们来了解下指令API 属性 含义 restrict 申明标识符在模版中作为元素,属性,类,注释或组合,如何使用 priority 设置模版中相对于其他标识符的执行顺序 Template 指定一个字符串式的内嵌模版,如果你指定了模版是一个URL,那么是不会使用的 tempateUrl 指定URL加载的模版,如果你已经指定了内嵌的模版字符串,那么它不会使用的 Replace 如果为真,替换当前元素,如果是假或未指定,拼接到当前元素 Transclude 移动一个标识符的原始字节带你到一个新

Angular系列---- AngularJS入门教程03:AngularJS 模板(转载)

是时候给这些网页来点动态特性了——用AngularJS!我们这里为后面要加入的控制器添加了一个测试. 一个应用的代码架构有很多种.对于AngularJS应用,我们鼓励使用模型-视图-控制器(MVC)模式解耦代码和分离关注点.考虑到这一点,我们用AngularJS来为我们的应用添加一些模型.视图和控制器. 请重置工作目录: git checkout -f step-2 我们的应用现在有了一个包含三部手机的列表. 步骤1和步骤2之间最重要的不同在下面列出.,你可以到GitHub去看完整的差别. 视图

Angular系列----AngularJS入门教程01:AngularJS模板 (转载)

是时候给这些网页来点动态特性了——用AngularJS!我们这里为后面要加入的控制器添加了一个测试. 一个应用的代码架构有很多种.对于AngularJS应用,我们鼓励使用模型-视图-控制器(MVC)模式解耦代码和分离关注点.考虑到这一点,我们用AngularJS来为我们的应用添加一些模型.视图和控制器. 请重置工作目录: git checkout -f step-2 我们的应用现在有了一个包含三部手机的列表. 步骤1和步骤2之间最重要的不同在下面列出.,你可以到GitHub去看完整的差别. 视图

[转载]AngularJS入门教程02:AngularJS模板

是时候给这些网页来点动态特性了——用AngularJS!我们这里为后面要加入的控制器添加了一个测试. 一个应用的代码架构有很多种.对于AngularJS应用,我们鼓励使用模型-视图-控制器(MVC)模式解耦代码和分离关注点.考虑到这一点,我们用AngularJS来为我们的应用添加一些模型.视图和控制器. 请重置工作目录: git checkout -f step-2 我们的应用现在有了一个包含三部手机的列表. 步骤1和步骤2之间最重要的不同在下面列出.,你可以到GitHub去看完整的差别. 视图

AngularJS入门和快速开始

Hello World! 开始学习AngularJS的一个好方法是创建经典应用程序"Hello World!": 使用您喜爱的文本编辑器,创建一个HTML文件,例如:helloworld.html. 将下面的源代码复制到您的HTML文件. 在web浏览器中打开这个HTML文件. 源代码 <!doctype html> <html ng-app> <head> <script src="http://code.angularjs.org

跟我学AngularJs:AngularJs入门及第一个实例

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:主要给大家介绍了AngularJs及其特性,并以3个实例来做说明. 下载地址:https://angularjs.org/ 一.AngualrJs简介 AngularJS是由谷歌开发出来的,它是为了克服HTML在构建应用上的不足而设计的.HTML是一门很好的为静态文本展示设计的声明式语言,但要构建WEB应用的话它就显得乏力了.通常,我们是通过以下技术来解决静态网页技术在构建动态应用上的

angularjs入门学习【应用剖析中篇】

在上一节讲完了关于应用开发中如数据绑定,添加样式一类的基础操作后,接下来,将在应用中,与控制其有关的一些事件... 一.UI和控制器的分离 我们需要明确控制器在应用中的三个作用: [1]在应用模型中设置初始状态 [2]通过$scope对象向视图(UI模版)暴露函数和模型 [3]监视模型发生变化的其他部分并做出相应的动作 二.发布scope中的数据模型 传递给控制器的$scope对象是一种用来向视图暴露模型数据的机制.在我们构建的应用中可能有其他数据,但是通过scope传递这些属性时,angula

angularjs入门-ng-show,ng-hide,ng-if

其实这三个directive很像,用法也大同小异,ng-if是会动态增减元素,ng-show和ng-hide则是把元素显示和隐藏而已,只是用隐藏的方式隐藏起来,就像jquery的$.show()和$.hide()的概念,使用上其实也非常简单,建立一个ng-repeat来说明,我现在只想显示people,其余非人类的全部默认就都不存在,那我就可以使用ng-if的方式,我们也可以想成就像在view上面写if的感觉,如下例子 {{item.name}}-{{item.animalType}} 我们也可

AngularJS入门心得2——何为双向数据绑定

前言:谁说Test工作比较轻松,最近在熟悉几个case,差点没疯.最近又是断断续续的看我的AngularJS,总觉得自己还是没有入门,可能是自己欠前端的东西太多了,看不了几行代码就有几个常用函数不熟悉的.看过了大漠的视频,算是了解了AngularJS的一些优良特性.后来准备投身<AngularJS权威教程>,跟着它走,可是一来可能自己道行不够,二来,个人觉得这本书翻译的有些生硬以及一些瑕疵,比如: (1)9.2节:在指令中适用自作用域 (2)9.2节:在指令中适用自作用域 当然,以上都是一些瑕

angularjs入门案例 新玩具-中午吃神马

angularjs 是一个用来开发单页webAPP的mvv框架,由Google 开发,如果不知道angularjs 的可以先google 下 按照angularjs 的开发一般顺序先搭建好需要做的视图,然后准备数据,最后绑定事件处理业务逻辑,操作DOM事件用户和程序的交互. 1.开始搭建界面,使用bootstrap作为UI框架,可以快速搭建清爽的界面效果,顺便引入 angular.js jquery.js 和我们需要写的app.js 作为业务逻辑 1 <!doctype html> 2 <