绑定对象,作为函数的上下文
对象或数组的迭代函数
var json = {"name":"hello","age":"20","sex":'男'};
angular.forEach(json,function(val,key){
console.log(val);//hello 20 男
console.log(key);//name age sex
});
var results=[];
angular.forEach(json,function(val,key){
this.push(key+'--'+val);
},results);
console.log(results);// ["name--hello", "age--20", "sex--男"]
数组或对象深度拷贝
$scope.a={name:'张三'};
$scope.b={age:10};
$scope.c=angular.copy($scope.a,$scope.b);
console.log($scope.a);//{name:'张三'}
console.log($scope.b);//{name:'张三'}
反序列化,将字符串转换成json对象
var json = '{"name":"hello","age":"20"}';
console.log(json);//{"name":"hello","age":"20"} 字符串
$scope.json=angular.fromJson(json);
console.log($scope.json);//对象
序列化,将json对象转换成字符串
var json = {"name":"hello","age":"20"};
console.log(json);//json对象
$scope.json=angular.toJson(json);
console.log($scope.json);//json字符串
继承
$scope.a={name:'张三'};
$scope.b={age:10};
$scope.c=angular.extend($scope.b,$scope.a);
console.log($scope.b);//{age: 10, name: "张三"}
$scope
里的$apply
作用:$scope
提供$apply
方法传播 Model 的变化
使用场景:AngularJS 外部的控制器(DOM 事件、外部的回调函数如 jQuery UI 空间等)调用了 AngularJS 函数之
后,必须调用$apply
。在这种情况下,你需要命令 AngularJS 刷新自已(模型、视图等), $apply
就是
用来做这件事情的。
{{name}} {{age}}
$scope
里的$watch
作用:$watch
方法监视 Model 的变化
单价:
个数:
费用:{{ sum() | currency:'¥' }}
运费:{{iphone.fre | currency:'¥'}}
总额:{{ sum() + iphone.fre | currency:'¥'}}
html
无标题文档
{{name}}
{{name}}
{{name}}
js
var app2 = angular.module("myApp2", []);
app2.controller('secondController',function($scope){
$scope.name='李四';
});
app2.controller('threeController',function($scope){
$scope.name='王五';
});
作用:ng-selected 属性的表达式返回 true 则选项被选中。
无标题文档
作用:
无标题文档
{{c}}
无标题文档
{{aaa}}
{{bbb}}
{{ccc}}
无标题文档
{{text}}
{{text}}
作用:用于循环输出指定次数的 HTML 元素
无标题文档
ng-disabled: 表达式返回 true 则表单字段将被禁用。
ng-readonly: 表达式返回 true 则表单域为只读。
ng-checked :属性返回 true,复选框(checkbox)或单选按钮(radio)将会被选中。
ng-value: 指令用于设置 input 或 select 元素的 value 属性。
无标题文档
expression的值为ng-switch-when中的值,相等的项显示
你可以通过使用 ng-switch-default 指令设置默认选项,如果都没有匹配的情况,默认选项会显示。
...
无标题文档
无标题文档
{{url}}
在我们的项目当中会遇到这样的情况,后台返回的数据中带有各种各样的html标签.对于angular 1.2一下的版本我们必须要使用$sce
这个服务来解决我们的问题。它可以通过使用$sce.trustAsHtml()。该方法将值转换为特权所接受并能安全地使用“ng-bind-html”。
无标题文档
{{name}}
更新输入框:
在失去焦点时绑定输入框的值到 scope 变量中:
{{name}}
该实例演示了如何使用 ng-model-options 指令绑定在失去焦点时输入框的值到 scope 变量中。
{{ "lower cap string" | uppercase }} //结果: LOWER CAP STRING
{{ "TANK is GOOD" | lowercase }} //结果: tank is good
{{ {foo: "bar", baz: 23} | json }} //结果: { "foo": "bar", "baz": 23 }
{{ 1304375948024 | date }} //结果: May 3, 2011
{{ 1304375948024 | date:"MM/dd/yyyy @ h:mma" }} //结果: 05/03/2011 @ 6:39AM
{{ 1304375948024 | date:"yyyy-MM-dd hh:mm:ss" }} //结果: 2011-05-03 06:39:08
{{ 1.234567 | number:1 }} //结果: 1.2
{{ 1234567 | number }} //结果: 1,234,567
{{ 250 | currency }} //结果: $250.00
{{ 250 | currency:"RMB ¥ " }} //结果: RMB ¥ 250.00
{{ [{"age": 20,"id": 10,"name": "iphone"},
{"age": 12,"id": 11,"name": "sunm xing"},
{"age": 44,"id": 12,"name": "test abc"}
] | filter:'s'}} //查找含有有 s 的行
//上例结果: [{"age":12,"id":11,"name":"sunm xing"},{"age":44,"id":12,"name":"test
abc"}]
{{ [{"age": 20,"id": 10,"name": "iphone"},
{"age": 12,"id": 11,"name": "sunm xing"},
{"age": 44,"id": 12,"name": "test abc"}
] | filter:{'name':'iphone'} }} //查找 name 为 iphone 的行
//上例结果:[{"age":20,"id":10,"name":"iphone"}]
{{ "i love tank" | limitTo:6 }} //结果: i love
{{ "i love tank" | limitTo:-4 }} //结果: tank
{{ [{"age": 20,"id": 10,"name": "iphone"},
{"age": 12,"id": 11,"name": "sunm xing"},
{"age": 44,"id": 12,"name": "test abc"}
] | limitTo:1 }} //结果: [{"age":20,"id":10,"name":"iphone"}]
{{ [{"age": 20,"id": 10,"name": "iphone"},
{"age": 12,"id": 11,"name": "sunm xing"},
{"age": 44,"id": 12,"name": "test abc"}
] | orderBy:'id':true }} //根 id 降序排
{{ [{"age": 20,"id": 10,"name": "iphone"},
{"age": 12,"id": 11,"name": "sunm xing"},
{"age": 44,"id": 12,"name": "test abc"}
] | orderBy:'id' }} //根据 id 升序排
m1.controller('Aaa',['$scope','$filter',function($scope,$filter){
$scope.name = $filter('date')('236478234','hh');
$scope.name = $filter('uppercase')('hello');
}]);
方法1:
使用filter()方法添加控制器
{{'Hello 哈哈' | replaceHello }}
方法2:
向控制器添加$filter
,使用其设置过滤器
方法3:
外部引入js,添加过滤器
html:
{{name | rHello}}
{{name | rHello:3:5}}
{{name | rJs}}
{{name}}
js:
var appFilter=angular.module("myApp.filter",[]);
appFilter.filter('rJs',function(){
return function(input,n1,n2){
console.log(input);
console.log(n1);
console.log(n2);
return input.replace(/js/, "javascript");
}
});
当你初试 Angular 时,很自然地就会往 controller 和 scope 里堆满不必要的逻辑。一定要早点意识到,controller 这一层应该很薄;也就是说,应用里大部分的业务逻辑和持久化数据都应该放在 service 里。很多人问道,关于如何在 controller 里保存持久化数据。这就不是 controller 该干的事。出于内存性能的考虑,controller 只在需要的时候才会初始化,一旦不需要就会被抛弃。因此,每次当你切换或刷新页面的时候,Angular 会清空当前的 controller。与此同时,service 可以用来永久保存应用的数据,并且这些数据可以在不同的 controller 之间使用。
无标题文档
{{name}}
无标题文档
$get
的回调中
无标题文档
{{name}}
在config中配置
无标题文档
Factory 方法直接把一个函数当成一个对象的$get 方法可以直接返回字符串.
用 Factory 就是创建一个对象,为它添加属性,然后把这个对象返回出来。你把service 传进 controller 之后,在 controller 里这个对象里的属性就可以通过factory 使用了。
无标题文档
Service 是用"new"关键字实例化的。因此,你应该给"this"添加属性,然后 service返回"this"。你把 service 传进 controller 之后,在 controller 里 “this” 上的属性就可以通过 service 来使用了
无标题文档
无标题文档
$interpolateProvider
改变数据绑定的格式该服务必须在config中配置
无标题文档
{{name}}
##name##
replace( )
(function(){
angular.module('Demo', [])
.controller('testCtrl',["$location","$scope",testCtrl]);
function testCtrl($location,$scope) {
var url = "http://example.com:8080/#/some/path?foo=bar&baz=xoxo#hashValue";
$location.absUrl();// http://example.com:8080/#/some/path?foo=bar&baz=xoxo#hashValue 返回 url,带有所有的片段
$location.url();// some/path?foo=bar&baz=xoxo
$location.protocol();// http 当前 url 的协议
$location.host();// example.com url 中的主机路径
$location.port();// 8080
$location.path();// /some/path
$location.search();// {foo: 'bar', baz: 'xoxo'}
$location.search('foo', 'yipee');
$location.search();// {foo: 'yipee', baz: 'xoxo'}
$location.hash();// #hashValue
$scope.$on("$locationChangeStart", function () {
//监听url变化,在变化前做想要的处理
});
$scope.$on("$locationChangeSuccess", function () {
//监听url变化,在变化后做想要的处理
});
}
}());
$cacheFactory
锚点跳转用法:$anchorScroll([hash]);
作用:当被调用的时候,页面会滚动到与元素相关联的指定的 hash 处,或者滚动到当前 $location.hash() 处。
它会监听 location.hash() 并且无论锚点值何时变化,都会自动地滚动到相应的位置。当不需要它时,可以调anchorScrollProvider.disableAutoScrolling()让它失效。
无标题文档
- {{id}}aaaaaaaaaa
{{id}}
作用:用于生成一个用来存储缓存对象的服务,并且提供对对象的访问。可以实现不同controller的数据共享
方法:
无标题文档
要在字符串模板中做插值操作,需要在你的对象中注入$interpolate服务
无标题文档
{{showText}}
在{{ showText }}内部的文本中可以将{{name }}当做一个变量来使用,并对文本的变化进行实时更新
参考 https://www.cnblogs.com/Likebard/p/7026095.html
$q就是一种对执行结果不确定的一种预先定义,如果成功,就xxxx;如果失败,就xxxx,就像事先给出了一些承诺。
比如,小白在上学时很懒,平时总让舍友带饭,并且事先跟他说好了,如果有韭菜鸡蛋就买这个菜,否则就买西红柿炒鸡蛋;无论买到买不到都要记得带包烟。
小白让舍友带饭()
.then(韭菜鸡蛋,西红柿炒鸡蛋)
.finally(带包烟)
其中defer()用于创建一个deferred对象,defer.promise用于返回一个promise对象,来定义then方法。then中有三个参数,分别是成功回调、失败回调、状态变更回调。
其中resolve中传入的变量或者函数返回结果,会当作第一个then方法的参数。then方法会返回一个promise对象,因此可以写成
xxxx
.then(a,b,c)
.then(a,b,c)
.then(a,b,c)
.catch()
.finally()
例子1
无标题文档
例子2
无标题文档
向控制台输出打印信息,简化调试和排除故障。
无标题文档
Message:
{{message}}