Skip to content

Latest commit

 

History

History
228 lines (180 loc) · 4.83 KB

README.md

File metadata and controls

228 lines (180 loc) · 4.83 KB

angular-mobile

angular-mobile是根据angular班门弄斧捣鼓出来的,其大小仅有1.84k(gzip之后)

起因

公司做移动端产品,对文件大小有要求,所以不能使用过大的脚本框架,所以angular,bootstrap,fundation都不能使用,连jquery都放弃了,只用zepto,而移动端业务同样有很多复杂的业务,本人因不愿意使用dom操作,而参照angular,实现了自己的一套“迷你angular”

使用方式

非模块化加载

var angular = new angular_mobile();
var info = {
	user: {
		name: "hu jin di",
		title: '系统架构师',
		desc: '拥有8年web开发经验',
		selected: "2",
		age:29
	},
	users: [{name:'hjd', age:18},{name:'zj', age:16}],
	testarray: ['a','b','c','d','e'],
	src: 'https://ss2.baidu.com/6ONYsjip0QIZ8tyhnq/it/u=567500855,645854378&fm=58'
}

//赋值并启动
angular.set('info', info, function(){
	//绑定数据完成时执行的回调函数
});
//在点击事件中如此便可以成功抓取用户的所有修改过的值
var result = angular.get('info');

模块化加载

define(['domready', 'zepto', 'common', 'angular'], function(doc, $, c, angular) {
	doc(function() {
		var info = {};
		//赋值并启动
		angular.set('info', info, function(){
			//绑定数据完成时执行的回调函数
		});
		//在点击事件中如此便可以成功抓取用户的所有修改过的值
		var result = angular.get('info');
	})
})

注意事项

事件的绑定请在set方法回调函数中执行,算是这个插件的瑕疵

	
	function bindEvent(){
		//要先off,然后on
		$(foo).off('click');
		$(foo).on('click', function(){});
	}
	
	angular.set('info', info, bindEvent);

单向绑定

表达式绑定

{{ info.user.name }}   
<!--hu jin di-->
{{info.user.age>18?真:假}} 
<!--真-->

属性绑定

<a href="#id={{info.user.age}}">id={{info.user.age}}</a>
<!--id=29-->
<span am-single="info.user.age>5?真:假"></span>
<!--真-->

双向绑定

基本用法

<input value="" am-bind="info.user.name" />

maxlength约束

<input value="" am-bind="info.user.name" maxlength="6" />
<!--maxlength属性也能用于其他元素,也可以用于单向绑定,例如下面的-->
<span am-single="info.user.name" maxlength="6"></span>

select元素

<!--info.user.selected=2-->
<select am-bind="info.user.selected">
	<option value="1">选项1</option>
	<option value="2">选项2</option>
	<option value="3">选项3</option>
</select>

列表数据绑定

数组绑定

<!--
var info = {
	……
	users: [{name:'hjd', age:18},{name:'zj', age:16}],
	testarray: ['a','b','c','d','e']
}
-->
<!--对于数组,{{$index}}表示索引,{{$v}}表示当前item的值-->
<ul am-repeat="info.testarray">
	<li>{{$index}}. {{$v}}</li>
</ul>

json数组绑定

<!--{{$index}}属性只要是am-repeat就可以使用-->
<ul am-repeat="info.users" >
	<li>{{$index}}. 姓名:{{name}},年龄:{{age}} </li>
</ul>

子列表绑定

var info = {
	users: [{
		name: 'hjd',
		age: 18,
		titles: [{
			titlename: 'TL',
			titledesc: 'team leader'
		}, {
			titlename: 'SA',
			titledesc: 'System Asnysdf'
		}]
	}, {
		name: 'zj',
		age: 16,
		titles: [{
			titlename: 'LP',
			titledesc: 'my wife'
		}, {
			titlename: 'W',
			titledesc: 'women'
		}]
	}]
}
<!--1. {{$index}}属性只能作用于顶层列表,子列表不支持该属性-->
<!--2. 子列表绑定不支持普通数组,只能用于json数组-->
<!--3. 表达式{{}}支持==,>=,<=,>,<,!= 6种三元运算符-->
<!--4. 子列表绑定最多支持2级嵌套,超过2级则不支持!-->
<ul am-repeat="info.users">
	<li>
		{{$index}}. 姓名:{{name}},年龄:{{age}}
		<div am-repeat="info.users.titles">
			<p>职位:{{titlename}},描述:{{titledesc}}</p>
		</div>
	</li>
</ul>

图片懒加载

示例

<!--每个图片都要设置一个高度,否则懒加载是无效的!-->
<img height='75' am-src="{{info.src}}" />
<br />
……
<img height='75' am-src="{{info.src}}" />
<br />

am-src的其他用途

如果某个图片的src属性中包含了表达式{{}},那么这个src属性必须使用am-src来使它延迟加载

<!--错误的方式-->
<img src="/img/source/logo/{{info.user.logo}}.jpg" />
<!--正确的方式-->
<img am-src="/img/source/logo/{{info.user.logo}}.jpg" />

元素自动隐藏

有时候一个属性没有值,我们需要自动将该元素隐藏掉

<!--作用于数组类型的字段-->
<ul am-repeat="info.testarray" am-hide="info.testarray">
	<li>{{$index}}. {{$v}}</li>
</ul>
<!--作用于文本类型的字段-->
<input value="" am-hide="info.user.name" />

支持对属性值取反"!"

<input am-hide="!info.user.name" />