[Ng]Angular应用点概览

-----------------------------------------------------------------------------------------------------

1. 使用模块化写法。

var app = angular.module(‘myApp‘, []);
app.controller(‘TextController‘, function($scope) {
     $scope.txt = {‘title‘:‘some txt‘};
});

  ng-model, ng-repeat, ng-change,ng-click(相当于onclick),ng-dblclick(相当于ondblclick)

  ng-repeat可以通过$index返回当前引用的元素序号;

还可以通过$first、$middle及$last,ng-repeat指令返回布尔值,告诉你当前元素是否是集合中的第一个元素、中间的某个元素,或者最后一个元素。

2. 首页使用ng-bind代替{{}},避免解析前用户看到花括号。

3. $wath() 监视表达式,监控数据模型的变化。

function($scope) {
     $scope.funding = {startingEstimate: 0};
     computeNeeded = function() {
          $scope.funding.needed = $scope.funding.startingEstimate * 10;
     }
     $scope.$watch(‘funding.startingEstimate’, computeNeeded);
}

  当$watch第一参数中的表达式值发生改变,则执行第二个参数中的函数,第三个参数为true则遍历第一个参数中表达式的属性,

当任何一个属性发生变化时就调用函数。

4. ng-submit="requestFunding()", ng-submit自动阻止浏览器执行默认的POST操作,当表单提交时执行指定函数。

5. 非侵入式JavaScript

<div ng-click="doSomething();">

  不在全局命名空间中进行操作,指定的表达式只能访问元素控制器作用域范围内的函数和数据。

6. 迭代型元素

$scope.insertTom = function() {
     $scope.students.splice(1, 0, {name:‘Tom Thumb‘, id: ‘4‘});
}

7. 隐藏和显示: ng-show, ng-hide

$scope.toggleMenu = function() {
     $scope.menuState.show = !$scope.menuState.show;
}

8. css类和样式:ng-class, ng-style

.error {background-color: red;}

<div ng-controller=‘headerController‘>
     <div ng-class=‘{error: isError, warning: isWarning}‘>{{messageText}}</div>
     <button ng-click=‘showError();‘>错误提示</button>
     <tr ng-repeat=‘restaurant in directory‘ ng-click=‘selectRestaurant($index)‘ ng-class=‘{selected: $index==selectedRow}‘>
          <td>{{restaurant.name}}</td>
     </tr>
</div>
function HeaderController($scope) {
     $scope.isError = false;
     $scope.isWarning = false;
     $scope.showError = function() {
          $scope.messageText = ‘这是错误信息‘;
          $scope.isError = true;
          $scope.isWarning = false;
     }
}
function RestaurantTableController($scope) {
     $scope.directory = [{
          name: ‘The handsome heifer‘, cuisine: ‘BBQ‘,
          name: ‘Greens green greens‘, cuisine: ‘salads‘
     }];
     $scope.selectRestaurant = function(row) {
          $scope.selectedRow = row;
     }
}
# 使用ng-class,json键为css类名,值为true则应用此类。

  在img和a标签上进行数据绑定时,使用{{ }}无法生效,使用ng-src 和 ng-href 才能拦截到数据绑定请求。

9. 使用模块(module)组织依赖关系

<html ng-app=‘ShoppingModule‘>
<body ng-controller=‘ShoppingController‘>
     <table><tr>
          <td>{{item.title}}</td>
     </tr></table>
</body>

function ShoppingController($scope, Items) {
     $scope.items = Items.query(); // Items对象定义成一个服务
}
// 创建模型
var shoppingModule = angular.module(‘ShoppingModule‘, []);
// 服务工厂,创建Items接口,访问服务端
ShoppingModule.factory(‘Items‘, function() {
     var items = {};
     items.query = function() {
          // 真实数据从服务端拉取
          return [
               {title: ‘‘, description: ‘‘}
          ];
     };
     return items;
});

  服务自身可以互相依赖,在大多数应用中,创建供所有代码使用的单个模块,并把所有依赖的东西都放入这个模块中,就能工作得很好。

  

  如果引入了SnazzyUIWidgets和SuperDataSync模块,那么应用的模块声明会像这样:

  var appMod = angular.module(’app’, [’SnazzyUIWidgets’, ’SuperDataSync‘]);

10. 过滤器

{{ 表达式 | 过滤器名称 : 参数1 : 参数2 }}

{{ 12.9 | currency | number:0 }}    // $13

// 自己编写首字母大写过滤器:
var homeModule = angular.module(‘HomeModule‘, []);
homeModule.filter(‘titleCase‘ function() {
     var titleCaseFilter = function(input) {
          var words = input.split(‘ ‘);
          for (var i = 0; i < words.length; i++) {
               words[i] = words[i].charAt(0).toUpperCase() + Words[i].slice(1);
          }
          return words.join(‘ ‘);
     };
     return titleCaseFilter;
});
<body ng-app=‘HomeModule‘, ng-controller=‘HomeController‘>
     <h1>{{ pageHeading | titleCase }}</h1>
</body>
function HomeController($scope) {
     $scope.pageHeading = ‘page title‘;
}

11. 用路由和$location切换视图

# index.html
     <html ng-app=‘AMail‘>
          <body>
               <h1>A-Mail</h1>
               <div ng-view></div>
          </body>
     </html>
# list.html
     <table><tr ng-repeat=‘message in messages‘>
          <td>{{ message.sender }}</td>
          <td><a href=‘#/view/{{ message.id }}‘>{{ message.subject }}</td>
          <td>{{ message.date }}</td>
     </tr></table>
# detail.html
     <div>
          <strong>To:</strong>
          <span ng-repeat=‘recipient in message.recipients‘>{{ recipient }}</span>
     </div>
     <a href=‘#/‘>返回列表</a>
# controller.js
// 为AMail服务创建模块
var aMailServices = angular.module(‘AMail‘, []);

// 在url、模板和控制器之间建立映射关系
function emailRouteConfig($routeProvider) {
    $routeProvider.
          when(‘/‘, {controller: ListController, templateUrl: ‘list.html‘}).
          // 在id前面加一个冒号,指定一个参数化的url
          when(‘/view/:id‘, {controller: DetailController, templateUrl: ‘detail.html‘}).
          otherwise({redirectTo: ‘/‘});
}

// 配置路由
a.MailServices.config(emailRouteConfig);
// 虚拟数据
messages = [{}];
// 给邮件列表数据的控制器
function ListController($scope) {
     $scope.messages = messages;
}
// 从路由信息(url中解析的)中获取邮件id,然后用它找到正确的邮件对象
function DetailController($scope) {
     $scope.message = messages[$routeParams.id];
}

12. 与服务器交互

// 查询代码, 模板中使用items,与服务端交互最好写在服务里
function ShoppingController($scope, $http) {
     $http.get(‘/products‘).success(function(data, status, headers, config) {
          $scope.items = data;
     });
}

13. 编写指令

var appModule = angular.module(‘app‘, []);
appModule.directive(‘ngbkFocus‘, function() {
     return {
          link: function(scope, element, attrs, controller) {
               element[0].focus();
          }
     };
});
// 使用
<button ngbk-focus>被聚焦的按钮</button>
var appModule = angular.module(‘app‘, [‘directives‘]);

14. 表单校验

<form name=‘addUserForm‘ ng-controller=‘AddUserController‘>
     <input ng-module=‘user.first‘ required>
     <input type=‘email‘ ng-module=‘user.email‘ required>
     <input type=‘number‘ ng-module=‘user.email‘ required>
     <button ng-disabled=‘!addUserForm.$valid‘>提交</button>
</form>

  required属性和email、number类型由angular适配支持非html5浏览器;

$valid属性获取表单的校验状态,输入项都合法时,angular将属性设为true.

function AddUserController($scope) {
     $scope.message = ‘‘;
     $scope.addUser = function() {
          // 保存到数据库中
     }
}

Link: http://www.cnblogs.com/farwish/p/4996253.html

@黑眼诗人 <www.farwish.com>

时间: 2024-09-30 19:29:16

[Ng]Angular应用点概览的相关文章

[Ng]Angular实践推介

------------------------------------------------------------------------------ AngularJs就像它宣称的一样,是为了扩展HTML的.所以我们本质上只需关注HTML展示,关注JS实现业务. 复杂的Dom操作交给框架提供的机制,它的directive.双向数据绑定.依赖注入 可以有效避免直接Dom操作,减少代码量. 甚至大部分复杂场景也适用,这里难免有些坑要填,网上正儿八经的完整示例比较难找,在不熟悉Angular内

angular模块

在angular中,模块可以是一个对象.一个方法或一个数组(数组的最后一个元素必须是方法).后面要讲的模块属性和方法,都是针对通过angular.module()方法定义的模块而言的,我称之为angular模块. 通过angular.module()方法定义的模块是唯一的,如果重复定义,后面的就会覆盖前面的定义.不是通过angular.module()定义的模块,比如一个方法或一个数组,这些模块也是唯一的,但是这些模块一旦定义无法被修改. angular模块可以说是一个空对象,因为它本身不包含任

1.Angular框架-angular介绍与基本使用,MVC模式介绍

1.1. AngularJS概述 1.1.1. 介绍 简称:ng Angular是一个MVC框架 AngularJS 诞生于2009年,由 Misko Hevery 等人创建,后为Google所收购. 是一款优秀的前端JS框架,已经被用于Google的多款产品当中. AngularJS有着诸多特性,最为核心的是: MVC.模块化(编程).自动化双向数据绑定.语义化标签.指令.依赖注入等等. 其他前端框架: VueJS . Avalon . React . BackBone . KnockoutJ

angular替代Jquery,常用方法支持

1.angular.bind(self,fn.args);   切换作用域执行 2.angular.copy(source,[destination]);   拷贝和深度拷贝 3.angular.equals(o1,o2);  比较 4.angular.extend(dst,src); 对象的扩展 5.angular.forEach(); 循环 6.angular.fromJson(string);字符串转Json 7.angular.toJson(json,pretty); json转字符串

AngularJS模块具体解释

模块是提供一些特殊服务的功能块.比方本地化模块负责文字本地化,验证模块负责数据验证.一般来说,服务在模块内部,当我们须要某个服务的时候,是先把模块实例化.然后再调用模块的方法. 但Angular模块和我们通常理解的模块不一样.Angular模块仅仅保留服务的声明,服务的实例化是由服务注入器完毕的,实例化之后服务就留在了服务注入器中,和模块没有关系了,这就是为什么我们使用的服务全部来自注入器的原因. 每调用一次angular.boostrap()方法会创建一个新的Angular应用和一个新的服务注

js 做账单处理

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@include file="/webpage/inc/inc.jsp"%> <!doctype html> <html lang="en"> <head> <met

嘿!@野兽,你的ng api 掉了 - - angular.forEach

@野兽的 ng api 学习 -- angular.forEach angular.forEach 调用迭代器函数取每一项目标的集合,它可以是一个对象或数组.迭代器函数与迭代器(value.key)一起调用,其中值是一个对象属性或数组元素的值,而数组元素是对象属性的关键或数组元素索引.为函数指定一个可选的上下文. 格式:angular.forEach(obj,iterator,[context]); obj:遍历的对象 iterator:迭代器 [content]: 对象为迭代器函数的上下文(t

嘿!@野兽,你的ng api 掉了 - - angular.uppercase和angular.lowercase

@野兽的 ng api 学习 -- angular.uppercase和angular.lowercase angular.uppercase 将指定的字符串转换成大写 格式:angular.uppercase(string); string:被转换成大写的字符串. 使用代码: var str = "ABCabc"; var upperCase = angular.uppercase(str);//ABCABC angular.lowercase 将指定的字符串转换成小写 格式:ang

嘿!@野兽,你的ng api 掉了 - - angular.identity和angular.noop

@野兽的 ng api 学习 -- angular.identity和angular.noop angular.identity 函数返回本身的第一个参数.这个函数一般用于函数风格. 格式:angular.identity() 使用代码: <script> angular.module("Demo", []) .controller("testCtrl", ["$scope", function ($scope) { var getR