码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2016-10-13 11:58:09      阅读:361      评论:0      收藏:0      [点我收藏+]

标签:

八、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坐标

 

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

标签:

原文地址:http://www.cnblogs.com/liujiale/p/5953669.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!