观《phonegap第三季 angularjs+ionic视频教程 实时发布》学习笔记(二)

八、Angularjs自定义服务 provide里provider方法 以及factory、service方法以及provider供应商的概念

Angular 提供了3种方法来创建并注册我们自己的服务。

1. Provider

Providers 是唯一一种你可以传进 .config() 函数的 service。当你想要在 service 对象启用之前,先进行模块范围的配置,那就应该用 provider。

(1)var app=angular.mudle(‘myApp‘,[],function(provide){$provide.provider=...;this.$get=function(){};});

(2)$scope.config=function(provide){}

2. Factory     ——可返回对象和字符串

Factory 方法直接把一个函数当成一个对象的$get 方法可以直接返回字符串

用 Factory 就是创建一个对象,为它添加属性,然后把这个对象返回出来。你把 service 传进 controller 之后,在 controller 里这个对象里的属性就可以通过 factory 使用了。

3. Service

Service 是用"new"关键字实例化的。因此,你应该给"this"添加属性,然后 service 返回"this"。你把 service 传进 controller 之后,在controller里 "this" 上的属性就可以通过 service 来使用了

4、三者的区别:

(1)provider要放在this.$get里面

(2)service可用this直接定义方法

(3)只有provider可以传入config

(4)service不能返回字符串

九、Angularjs 常用服务 $http $location $anchorScroll $cacheFactory $timeout $interval $sce

1.$http

(1)get

(2)post

(3)jsonp

2.$location

$location服务解析地址栏中的URL(基于window.location),让你在应用代码中能获取到。改变地址栏中的URL会反应$location服务中,反之亦然。

(1) 暴露当前地址栏的URL,这样你就能
? 获取并监听URL。
? 改变URL。
(2)当出现以下情况时同步URL
? 改变地址栏
? 点击了后退按钮(或者点击了历史链接)
? 点击了一个链接
(3)一系列方法来获取URL对象的具体内容用(protocol, host, port, path, search, hash).formatDate

(4)$location不会做

当浏览器的URL改变时,不会重新加载整个页面。如果想要重新加载整个页面,需要使用$window.location.href。
(5)内置方法:

absUrl( ):只读;根据在RFC 3986中指定的规则,返回url,带有所有的片段。

hash( ):读、写;当带有参数时,返回哈希碎片;当在带有参数的情况下,改变哈希碎片时,返回$location。

host( ):只读;返回url中的主机路径。

path( ):读、写;当没有任何参数时,返回当前url的路径;当带有参数时,改变路径,并返回$location。(返回的路径永远会带有/)

port( ):只读;返回当前路径的端口号。

protocol( ):只读;返回当前url的协议。

replace( ):如果被调用,就会用改变后的URL直接替换浏览器中的历史记录,而不是在历史记录中新建一条信息,这样可以阻止『后退』。

search( ):读、写;当不带参数调用的时候,以对象形式返回当前url的搜索部分。

url( ):读、写;当不带参数时,返回url;当带有参数时,返回$location。

3.$cacheFactory

<script>
var m1 = angular.module(‘myApp‘,[]);
 m1.controller(‘Aaa‘,[‘$scope‘,‘$cacheFactory‘,‘$log‘,function($scope,$cacheFactory,$log){
 $log.error(‘hello‘);
var cache = $cacheFactory(‘myCache‘);
 cache.put(‘name‘,‘hello‘); cache.put(‘age‘,‘20‘); cache.put(‘job‘,‘it‘); }]);
m1.controller(‘Bbb‘,[‘$scope‘,‘$cacheFactory‘,‘$log‘,function($scope,$cacheFactory,$log){
var cache = $cacheFactory.get(‘myCache‘); console.log(cache.get(‘name‘)); }]);
</script>

4、$timeout

$timeout(function(){ $scope.name = ‘123‘; },1100);

5、$interval

$ inteval(function(){ $scope.name = ‘123‘; },1100);

6、$sce  ——用于解析html代码文章里面的标签

var app = angular.module("myApp", []); app.controller(‘firstController‘,function($scope,$timeout,$sce,$http){
$scope.name = ‘hello‘;
$scope.text = ‘<h1>hello</h1>‘;
 var myUrl = "http://www.phonegap100.com/appapi.php?a=getPortalArticle&aid=338&callback=JSON_CALLBACK"; $http.jsonp(myUrl).success( function(data){
//$scope.portalDetail = data.result[0];
 $scope.detailContent = function() {
 return $sce.trustAsHtml(data.result[0].content); }; } ).error(function(){ alert(‘失败‘); }); });

7、$anchorScroll

可直接跳转到网页上指定id的位置,例如点击某个li跳转至页面对应id处,方法一:$scope.hash(id);方法二:$anchorScroll();

十、angularjs ngSanitize ngRoute ngAnimate插件

1、ngSanitize     ——ng-bind的插件

让浏览器简析html标签
(1) 引入js angular-sanitize.min.js
(2) 在module 中引入一下插件 var app = angular.module("myApp", [‘ngSanitize‘]);
(3) 使用<div ng-bind-html="text"></div> 绑定数据

2、ngRoute

引入js 依赖注入
<script src="http://cdn.bootcss.com/angular.js/1.2.9/angular-route.min.js"></script>

var m1 = angular.module(‘myApp‘,[‘ngRoute‘]);
m1.config([‘$routeProvider‘,function($routeProvider){ $routeProvider .when(‘/aaa/:num‘,{
 template : ‘<p>首页的内容</p>{{name}}‘,//可以是标签,可以是url
controller : ‘Aaa‘
}) .when(‘/ccc‘,{
template : ‘<p>课程的内容</p>{{name}}‘,
 controller : ‘Ccc‘ }) .otherwise({
 redirectTo : ‘/aaa‘
}); }]);

(1)$rootParams

(2)$on

(3)$routeChangeStart

(4)$routeChangeSuccess/Error

3、ngAnimate     ——页面切换动效

(1) 引入js
<script src="http://cdn.bootcss.com/angular.js/1.3.8/angular-animate.min.js"></script>
(2) var m1 = angular.module(‘myApp‘,[‘ngAnimate‘]);
(3) 使用下面的几种方式

CSS3的方式(1)

ng-enter

ng-enter-active

ng-leave

ng-leave-active

支持的指令

if,view,repeat,include,swtich repeat:ng-enter-stagger animation-delay

CSS3的方式(2)

ng-hide-add

ng-hide-add-active

ng-hide-remove

ng-hide-remove-active

支持的指令

class,show,hide,model等

JS方式

animation()

enter/leave

removeClass/addClass

m1.animation(‘.box‘,function(){
 return {
addClass : function(element,sClass,done){
//console.log(element);
//console.log(sClass);
//console.log(done); 

$(element).animate({width:0,height:0},1000,done); }, 

removeClass : function(element,sClass,done){ $(element).css({width:0,height:0}); $(element).animate({width:200,height:200},1000,done); } }; });

十一、$resource 数据交互插件

后端支持跨域请求: header(‘Access-Control-Allow-Origin: *‘);

1、$resource

$resource(url, [paramDefaults], [actions], options);

支持方法:

{

‘get‘: {method:‘GET‘},

‘save‘: {method:‘POST‘},

‘query‘: {method:‘GET‘, isArray:true},

‘remove‘: {method:‘DELETE‘},

‘delete‘: {method:‘DELETE‘}

};

(1) 引入 angular-resource.min.js
(2) 定义模块时加载ngResource
var app = angular.module(‘app‘,["ngResource"]);

(3)var User = $resource(‘/user/:userId‘, {userId:‘@id‘});

  var user = User.get({userId:123}, function() { user.abc = true; user.$save(); });

myAppModule.factory(‘CreditCard‘, [‘http‘, function($http) {
 var baseUrl = ‘/user/123/card‘;
 return {
get: function(cardId) {
 return $http.get(baseUrl + ‘/‘ + cardId); },
save: function(card) {
var url = card.id ? baseUrl + ‘/‘ + card.id : baseUrl;
return $http.post(url, card); },
query: function() {
 return $http.get(baseUrl);
 }, charge: function(card) {
 return $http.post(baseUrl + ‘/‘ + card.id, card, {params: {charge: true}}); } }; }]);
myAppModule.factory(‘CreditCard‘, [‘$resource‘, function($resource) {
return $resource(‘/usr/:userId/card/:cardId‘,
{userId: 123, cardId: ‘@id‘},
{charge: {method: ‘POST‘, params: {charge: true}, isArray: false}); }]);

十二、手机app开发的几种方式 ionic学习思路以及ionic新建的项目分析

1. 目前开发手机app的几种方式

(1)原生/Native:使用原生SDK开发App。优点不用说,当你有足够的资源,这是最理想的方式;缺点是对不同的 平台要分别开发,学习成本高,开发成本高、开发周期长、不易于web开发人员和企业建站公司转型;

(2)原生脚本/NativeScript:将原生API封装成JavaScript接口,这有点像前端的nodejs。NativeScript方式 与原生相比性能损失不大(据称只有10%左右),优点是开发语言统一使用JavaScript,缺点是 要针对不同的平台分别开发。

(3)原生+web/ Hybrid:使用原生技术开发,部分页面调用web。优点是比纯原生开发周期短, 页面更新方便,如支付宝,还有很多app的详情页面。缺点:需要原生和web配合。

(4)混合/Hybrid:使用web技术开发App,使用Cordova/PhoneGap之类进行打包封装。优点是采用标准的web技术开发, 避免了不同平台原生开发体系的学习,学习成本低,上手快、效率高,一次开发 微信 wap app全部搞定;缺点是app 在android平台性能上有一些损失,但是相信硬件的发展会接近原生。

——ionic属于hybrid开发模式,本质上是将移动web应用与浏览器打包,优点 MVC 基于angularjs,运行速度快 UI漂亮 开发简单 缺点:学习成本比其他的html5框架稍微高一些(比如jqmobi) 需要具备angularjs基础。 是否采用这种模式,需要根据具体情况综合考虑。

十三、ionic css布局介绍

1、布局模式

基本布局:标题/header、内容/content和页脚/footer。

? .bar.bar-header - 声明元素为标题区
? .bar.bar-footer - 声明元素为底部
? .content . scroll-content- 声明元素为内容区

2、.bar : 位置

ionic使用以下样式定义条块的位置:

? .bar-header - 置顶
? .bar-subheader - header之下置顶
? .bar-footer - 置底
? .bar-subfooter - footer之上置底

3、.bar : 嵌入子元素

在ionic中,有三种.bar子元素的样式是预定义的:(1)标题文字 - 对包含标题文字的元素应用.title样式,通常使用h1元素;(2)按钮 - 对用作按钮的元素,应用.button样式,通常使用button 或a元素作为按钮。注意按钮将使用.bar的配色方案;(3)工具栏 - 工具栏包含一组按钮。对用作工具栏的元素,应用.button-bar样式,通常 使用div元素作为工具栏。

4、bar : 嵌入input

一种常见的UI模式是在标题栏中嵌入搜索栏。

在.bar元素中嵌入input元素,需要注意两点:
1. 在条块元素上应用.item-input-inset样式
2. 将input包裹在应用.item-input-wrapper样式的元素内

5、内容:.content和.scroll-content

ionic预定义了两个内容容器样式:
? .content – 相对定位
? .scroll-content - 绝对定位,内容元素占满整个屏幕

6、Ionic 色彩、图标和边距

(1)ionic定义了九种前景/背景/边框的色彩样式

(2)ionic 中的图标

使用图标很简单,在元素上声明以下两个CSS类即可:
? .icon - 将元素声明为图标
? .ion-{icon-name} - 声明要使用的具体图标

7、ionic界面组件列表

(1)列表 : .list

(2)成员容器 : .item

(3).item : 嵌入文本:.item元素可以使用h1~h6/p标签插入不同规格的文本。

(4).item : 嵌入图标

(5).item : 嵌入头像

(6).item : 嵌入缩略图

(7).item : 嵌入大图 item-image

(8).item card

要插入图标,需要满足两个条件:
a. . card 可以让list和左右有一些边距
b. 在. item-divider元素定义list的头和尾

8、ionic界面组件按钮

(1)按钮 : .button

(2).button : 嵌入图标

(3)在列表中使用按钮

(4)button-block  ——button显示成块元素

9、ionic界面组件 表单输入

(1)输入组件容器 : .item-input

(2)文本输入 : input[type="text"]

(3)文本输入:使用占位符做标签

(4)文本输入:堆叠式标签

(5)开关 : .toggle input[type="checkbox"]

(6)复选按钮

(7)单选按钮 : .item-radio input[type="radio"]

(8)滑动条 : .range input[type="range"]

(9)选择框 : .item-select select

10、界面组件选项卡

(1)选项卡 : .tabs

(2)tab-item : 使用图标

(3).tab-item : 使用徽章

(4).tabs : 顶部选项卡

(5).tab-striped .tabs: 条带风格选项卡

11、栅格系统

(1).col : 默认的定宽列

(2).col-{width-percent} : 指定列宽

供我们快速指定列宽:
.col-10 - 占据容器10%宽度

.col-20 - 占据容器20%宽度

.col-25 - 占据容器25%宽度

.col-33 - 占据容器33%宽度

.col-50 - 占据容器50%宽度

.col-67 - 占据容器67%宽度

.col-75 - 占据容器75%宽度

.col-80 - 占据容器80%宽度

.col-90 - 占据容器90%宽度

(3).col-{width-percent} : 指定列宽

(4).col-offset-{width-percent} : 指定列偏移

(5).col-{align} : 列纵向对齐

.col-top - 让元素纵向顶对齐

.col-center - 让元素居中对齐

.col-bottom - 让元素向底对齐

十四、ionic js指令布局介绍

1、ion-header-bar

align-title - 设置标题文字的对齐方式。允许值:left | right | center,分别对应左对齐、 右对齐和居中对齐。
? no-tap-scroll - 当点击标题时,是否将内容区域自动滚动到最开始。允许值:true | false,默认为false。

2、ion-footer-bar

align-title - 设置标题文本的对齐方式。允许值:left | right | center 。

3、ion-content

4、ion-scroll

ion-scroll指令有两个常用的可选属性:
? direction - 内容可以滚动的方向。允许值:x|y|xy。默认为 y。
? zooming - 是否支持pinch-to-zoom(捏拉缩放)。允许值:true | false。

5、ion-refresher

ion-refresher指令有以下可选的属性:
? on-refresh - 当用户向下拉动足够的距离并松开时,执行此表达式
? on-pulling - 当用户开始向下拉动时,执行此表达式
? pulling-text - 当用户向下拉动时,显示此文本
? pulling-icon - 当用户向下拉动时,显示此图标
? refreshing-icon - 当用户向下拉动并松开后,显示的等待图标。ionic推荐使用spinner 代替这个属性
? spinner - 和refreshing-icon的作用一样,但spinner是基于SVG的动画
? disable-pulling-rotation - 禁止下拉图标旋转动画

6、ion-infinite-scroll

ion-infinite-scroll指令有如下属性:
? on-infinite - 必须。当滚动到底部时执行此表达式
? distance - 可选。距底部距离百分比。当距离底部超过此数值时,执行on-infinite。默认为1%
? icon - 可选。载入时显示的图标。默认是ion-load-d。ionic推荐使用spinner代替icon属性
? spinner - 可选。载入时的spinner。默认是ionSpinner
? immediate-check - 可选。是否在载入时立即检查滚动框范围

7、$ionicScrollDelegate

可以使用服务$ionicScrollDelegate,通过脚本控制滚动容器(ion-scroll或ion-content)。 $ionicScrollDelegate服务提供的常用方法如下:
? resize()
重新计算容器尺寸。当父元素大小变化时,应当调用此方法
? scrollTop([shouldAnimate])
滚动到内容顶部。shouldAnimate参数为true|false,表示是否使用动画展示滚动过程
? scrollBottom([shouldAnimate])
滚动到内容底部。shouldAnimate参数为true|false,表示是否使用动画展示滚动过程
? scrollTo(left,top[,shouldAnimate])
滚动到指定位置。left和top分别表示要滚动到的x坐标和y坐标
? scrollBy(left,top[,shouldAnimate])
滚动指定偏移量。left和top分别表示要滚动的x偏移量和y偏移量
? getScrollPosition()
读取当前视图位置。返回值为一个JSON对象,具有left和top属性,分别表示x和y坐标

时间: 2024-08-04 18:23:35

观《phonegap第三季 angularjs+ionic视频教程 实时发布》学习笔记(二)的相关文章

RTX51 Tiny实时操作系统学习笔记—初识RTX51 Tiny

 一,RTX51 Tiny简单介绍 RTX51 Tiny是一种实时操作系统(RTOS),能够用它来建立多个任务(函数)同一时候运行的应用(从宏观上看是同一时候运行的,但从微观上看,还是独立运行的).嵌入式应用系统常常有这样的需求.RTOS能够提供调度.维护.同步等功能. 实时操作系统能灵活的调度系统资源,像CPU和存储器,而且提供任务间的通信.RTX51 Tiny是一个功能强大的RTOS,且易于使用,它用于8051系列的微控制器.该RTOS最多支持16个任务,基于RTX51 Tiny构建的应用程

angularjs 学习笔记(二) ----- bootstrap框架

1.  下载新的jquery-1.11.1文件. 2.  下载新的bootstrap文件. 3.  选择流式布局的模板填充入index.html文件. 4.  将top.foot转为nginclude文件 nginclude必须使用$scope对象,因此需要设置一个全局的mainctrl来将字符串或全局变量注入$cope中. $rootScope.global =global; 直接将全局变量global赋值给$rootScope,并且之后的子$Scope会获得继承,静态定义与ctrl分开. 5

ucos实时操作系统学习笔记——操作系统在STM32的移植

使用ucos实时操作系统是在上学的时候,导师科研项目中.那时候就是网上找到操作系统移植教程以及应用教程依葫芦画瓢,功能实现也就罢了,没有很深入的去研究过这个东西.后来工作了,闲来无聊就研究了一下这个只有几千行代码的操作系统,也没所有的代码都看,只是看了其中部分内容.自己还自不量力的尝试着去写过简单的操作系统,最后写着写着就被带到了ucos的设计思路上了,后来干脆就“copy”代码了,虽说对操作系统内核的理解有很大的帮助,但是很是惭愧啊,智力不够,对操作系统内核的设计者更加仰慕,O(∩_∩)O哈哈

ucos实时操作系统学习笔记——任务间通信(信号量)

ucos实时操作系统的任务间通信有好多种,本人主要学习了sem, mutex, queue, messagebox这四种.系统内核代码中,这几种任务间通信机制的实现机制相似,接下来记录一下本人对核心代码的学习心得,供以后回来看看,不过比较遗憾的是没有仔细学习扩展代码的功能实现部分.ucos操作系统的内核代码实现相对简单,但是对理解其他操作系统内核相同功能有帮助. ucos的任务间通信机制主要是基于event实现的,其实理解这个event不用翻译成中文事件,就叫event感觉还更容易接收.下面是操

AngularJS 学习笔记二

AngularJS指令 指令 描述 讲解 ng_app 定义应用程序的根元素. 指令 ng_bind 绑定 HTML 元素到应用程序数据. 简介 ng_click 定义元素被单击时的行为. HTML 事件 ng_controller 为应用程序定义控制器对象. 控制器 ng_disabled 绑定应用程序数据到 HTML 的 disabled 属性. HTML DOM ng_init 为应用程序定义初始值. 指令 ng_model 绑定应用程序数据到 HTML 元素. 指令 ng_repeat

PhoneGap学习笔记(二) 部分事件、设备信息、网络状态和通知

部分事件如下: deviceready:表示phoneGap已经就绪 menubutton:菜单键按下 backbutton:返回键按下 pause:程序转入后台运行 resume:程序进入前台运行 online:设备连接网络(测试设备从断网进入联网状态触发,WIFI和数据网络相互切换也会触发) offline:设备断开网络(测试设备失去网络连接触发,WIFI和数据网络相互切换也会触发) 部分对象如下: window.device:设备信息对象 device.name:设备名称 device.c

ucos实时操作系统学习笔记——任务间通信(互斥锁)

想讲一下ucos任务间通信中的mutex,感觉其设计挺巧妙,同sem一样使用的是event机制实现的,代码不每一行都分析,因为讲的没邵贝贝老师清楚,主要讲一下mutex的内核是如何实现的.可以理解互斥锁是设置信号量值为1时候的特殊情况,与之不同的地方是互斥锁为了避免优先级反转采用了优先级继承机制,本文主要讲一下互斥锁的创建,pend和post,对应的函数是OSMutexCreate,OSMutexPend,OSMutexPost,当然讲函数也不会所有的扩展功能都讲,只是讲一下主干部分,下面贴出来

新闻发布系统笔记二

1.批量删除的实现:首先是前端的checkbox,实现点击最上面的复选框,会全选或者取消下面的复选框选择状态. 通过jquery实现,涉及了一个属性选择器,用来选择结点或者设置属性.prop法,$("input[name='commentIds']").prop("checked",true); 这一句是设置所有name属性是commentIds的结点checked属性为true.代码如下: $(document).ready(function(){ $("

AngularJS学习笔记二

指令 1.restrict:指令声明四种表现形式:A(属性).C(类).E(元素).M(注释),使用“restrict”来进行配置. 2.template:指令中生成的字符串html模版 3.templateUrl:模版的地址 4.replace:将原指令所在标签替换为模版内容时,是否保存原指令html,为false时则将模版中内容插入原指令标签中. 5.transclude:将原指令中间的内容移动到template中有“ng-transclude”指令所属标签位置,为true时,覆盖模版中标签