Angular简单应用剖析徐大腿

这一篇我们将一起感受学习一个小型的、活生生的应用,而不是继续深入分析哪些单个的特性。我们将会一起感受一下,前面所讨论过的所有片段如何才能真正的组合在一起,形成一个真实的、可以运行的应用。

GutHub是一款菜谱管理应用。我们学习它有两个目的,第一是用它来管理美味的菜谱,第二是用它来学习angularjs的方方面面:

这款应用的特性如下:

a)两列布局

b)在左侧有一个导航栏

c)允许你创建新菜谱

d)允许你浏览现有的菜谱列表

主视图位于右侧,主视图将会根据具体的URL刷新,可惜显示菜谱列表、菜谱项目详情、以及用来添加或编辑菜谱的表单。

这三种东西是如何协作的,应用应该用什么样的视角来看待它们。

最有,模版代表模型的展现形式,以及用户应该如何与应用进行交互。模版主要用来做一下事情:

n展示模型

n定义用户与应用之间的交互方式

n给应用提供样式,并且判断何时以及怎样显示一些元素

n过滤并格式化数据

视图是模版和模型融合之后产生的东西。模版中不应该包含任何业务逻辑和行为,只有控制器才能具备这些特性。但是你可能会问,DOM操作应该放到那里呢?DOM操作并不会发生在控制器或模版中。它由angular指令负责(有时候也可以通过服务进行操作,DOM操作放到放到服务中可以避免重复代码)。

对于当前这款应用,我们将会让模型保持超级简单。这里的模型就是一些菜谱,它们将是真个应用的唯一的模型对象,其他所有的东西都是构建在模型之上。

每一天菜谱都具有一下特性:

就这么多,超级简单,应用中所有的东西都围绕这个简单的模型而构建,下面是一天简单的菜谱:

1{2"id":"1",3"title":"热姜汁藕片",4"description":"藕片切得越薄越容易入味。",5"ingredients":[6{7"amount":"450",8"amountUnits":"g",9"ingredientName":"姜"10},11{12"amount":"450",13"amountUnits":"g",14"ingredientName":"藕"15},16{17"amount":"0",18"amountUnits":"0",19"ingredientName":"香油"20},21{22"amount":"3",23"amountUnits":"g",24"ingredientName":"食盐"25},26{27"amount":"50",28"amountUnits":"mml",29"ingredientName":"白醋"30}31],32"instructions":"1、准备食材\n2、姜用工具磨成姜蓉\n3、姜用工具磨成姜蓉\n4、藕片入开水汆一下,大概3分钟断生,捞出\n5、锅里倒入白醋\n6、烧至沸腾后加入姜蓉\n7、30秒后加入香油和盐,将热姜汁淋入藕片上,腌制20分钟左右即可食用"3334}ViewCode

我们继续来看,围绕这个简单的模型如何构建更加复杂的UI功能。

我们要完成这个应用需要几个指令和控制器代码,然后再来看所需要的控制器。

文件位置menuSolution\app\services\services.js

1varservices=angular.module('guthub.services',['ngResource']);2services.factory('Recipe',['$resource',function($resource){3return$resource('/recipes/:id',{id:'@id'});4}]);56services.factory('MultiRecipeLoader',['Recipe','$q',function(Recipe,$q){7returnfunction(){8vardelay=$q.defer();9Recipe.query(function(recipes){10delay.resolve(recipes);11},function(){12delay.reject('无法取出食谱');13});14returndelay.promise;15};16}]);1718services.factory('RecipeLoader',['Recipe','$route','$q',function(Recipe,$route,$q){19returnfunction(){20vardelay=$q.defer();21Recipe.get(22{id:$route.current.params.recipeId},23function(recipe){24delay.resolve();25},26function(){27delay.reject('无法取出食谱'+$route.current.params.recipeId);28}29);3031returndelay.promise;32};33}]);ViewCode

Recipe.get();Recipe.save();Recipe.delete();Recipe.query();Recipe.remove();

注:如果你打算使用Recipe.delete();,并且希望在ie中使用它,你必须这样调用它Recipe[delete](),这是因为在IE中delete是一个关键字。

假设我们现在有一个菜谱对象,必要的信息都已经放在就这个对象里面了,包括Id。然后通过下面这些代码我们就可以把它保存起来:

varrecipe=newRecipe(obj);//假设id=13

recipe.$save();

以上代码会向/recipe/13路径发起一次POST请求。

其次,还有两个服务,正两个服务都是加载器:一个是单个菜单加载器,另个一是所有菜单加载器。当我们连接到路由上去,就会用到这两个加载器。它们的核心工作原理非常相似。这两个服务的工作流程如下:

Promise是一个接口,他用来处理的对象具有这样的特点:在未来的某一时刻(主要是异步调用)会从服务端返回或者被填充属性。其核心是,promise是一个带有then函数的对象.

使用promise机制的优点如下:

你可能会问,resolve(解决)方法和reject(拒绝)方法又是什么呢在angular中延迟调用是实现promise的一种方式。调用resolve方法会填充promise(也就是调用success函数),而reject方法将会调用promise的错误处理函数。

现在我们来看看应用中的指令。在目前这款应用中我们会用到如下两条指令。

Butterbar

当路由发生变化同时页面还在加载时,这一指令将会显示和隐藏信息的操作。指令将会被嵌入到路由的变化机制中,然后根据页面的状态自动隐藏或显示其标签中的内容。

Focus

Focus指令要你过来确保特定的输入项(或元素)能否获得焦点。

文件位置menuSolution\app\directives\directives.js

1vardirectives=angular.module('guthub.directives',[]);2directives.directive('butterbar',['$rootScope',function($rootScope){3return{4link:function(scope,element,attrs){5element.addClass('hide');6$rootScope.$on('$routeChangeStart',function(){7element.removeClass('hide');8});9$rootScope.$on('$routeChangeSuccess',function(){10element.addClass('hide');11});12}13}14}]);1516directives.directive('focus',function(){17return{18link:function(scope,element,sttrs){19element[0].focus();20}21};22});ViewCode

以上指令将会返回一个对象,这个对象只有一个link属性。

1、指令的处理过程分为两个步骤。在编译过程中,找到绑定在DOM元素上的指令,然后进行处理。所有的DOM操作都发生在编译阶段,在这一阶段结束之后,会产生一个内联函数。

可以像下面这样使用butterbar指令:

myloadingtext……

在一开始的时候只是简单把它隐藏起来,然后在作用域上添加两个监听器。每当路由器发生变化时,它就会显示内部元素。每当路由成功完成变化之后,它又会把butterbar隐藏起来。

另外还有一个有趣的东西是,那就是如何把$tootScope注入到指令中。所有指令都会被直接连接到angularjs的依赖注入系统中。

第二个focus指令更加简单。它实在调用当前元素上的focus()方法而已。你可以在任何元素上添加focus属性来调用它。

当页面加载完成之后,文本框会自动获取焦点。

文件位置menuSolution\app\controller\controller.js

写完指令和服务之后,终于改写控制器了,这里我们需要5个控制器。所有这些控制器都位于同一个文件夹中

你可能注意到了,edit和New这两个控制器的路由都指向了相同的模版URL——-/views/recipeForm.html,是怎么回事呢?因为我们会根据关联控制器的不同,在菜谱模版中显示不同的元素。

做完这些之后,我们来看看模版。看看这些控制器是如何把它们关联起来的,以及如何管理显示给最终用户的内容。

我们会从最外层的主模版入手,也是就index.html。他就是我们单页应用的根。其他模版都会加载到这个模版的内部。

模版位置menuSolution\app\views\

主要的模版:

在这个模版中有几个比较有趣的元素需要注意,其中大部分已经聊过。其中包括ng-app、ng-view、butterbar明显还缺少ng-controller。

现在我们来看每个控制器上的模版:

菜谱列表模版:

第二个模版:

1

{{recipe.title}}

2
{{recipe.description}}
345{{ingredient.amount}}6{{ingredient.amountUnits}}7{{ingredient.ingredientName}}891011

Intructions

12
{{recipe.instructions}}
131415修改16
171819ViewCode

菜谱表单模版:

项目架构图:

这个项目比较简单、就不上效果图了。大家可以写一个自己的demo来熟悉angular的各个模块。

THE END
1.周食谱Excel表格模板周食谱Excel表格模板下载Excel表格 熊猫办公共为您提供74个周食谱Excel模板 幼儿园一周食谱表execl模板 16414 幼儿园一周食谱Excel模板 15810 学生一周食谱表Excel模板 1285 幼儿园一周健康营养食谱Excel模板 9912 一周营养食谱表Execl模板 844 一周食谱菜单excel模板 495 一周减肥食谱Excel模板https://www.tukuppt.com/excelmuban/zhoushipu.html
2.26道家常菜菜谱大全,勤劳下厨的人先享受美食,每一道菜都很美味鸡腿26道家常菜菜谱大全,勤劳下厨的人先享受美食,每一道菜都很美味,美食,鸡腿,蒜香,咖喱,超级,手撕鸡,咕噜肉,酸菜鱼,家常菜https://www.163.com/dy/article/JIAKV2AK05568JTI.html
3.菜谱菜单设计菜谱菜单模板菜谱菜单图片觅知网为您找到929个原创菜谱菜单设计图片,包括菜谱菜单图片,菜谱菜单素材,菜谱菜单海报,菜谱菜单背景,菜谱菜单模板源文件下载服务,包含PSD、PNG、JPG、AI、CDR等格式素材,更多关于菜谱菜单素材、图片、海报、背景、插画、配图、矢量、UI、PS、免抠,模板、艺术字、Phttps://m.51miz.com/so-sucai/3057076.html
4.2024学年度第一学期第14周学生营养午餐菜谱物料名称4 含量(g) 星期一 百叶结烧肉 大荤 五花肉 50g 精肉 50g 百叶结 30g 星期一 糖醋小排 大荤 小排 100g 星期一 冬瓜木耳鸡片 小荤 冬瓜 140g 黑木耳(干) 1g 鸡胸肉 15g 星期一 炒青菜 素菜 青菜 120g 星期一 蘑菇蛋汤 汤 蘑菇 10g 鸡蛋 10g 星期二 咖喱土豆鸡块 大荤 鸡边腿 12https://cgzx.qpedu.cn/jngg/483837.htm
5.菜谱活页菜谱活页厂家品牌图片热帖阿里巴巴1688为您优选1876条菜谱活页热销货源,包括菜谱活页厂家,品牌,高清大图,论坛热帖。找,逛,买,挑菜谱活页,品质爆款货源批发价,上1688菜谱活页主题频道。https://www.1688.com/zhuti/-B2CBC6D7BBEED2B3.html
6.食谱菜谱菜单食谱菜谱菜单图片食谱菜谱菜单设计模板红动中国素材网提供134个食谱菜谱菜单、食谱菜谱菜单图片、食谱菜谱菜单素材、食谱菜谱菜单模板下载,包含了psd、ai、png,jpg、cdr等格式食谱菜谱菜单,更多精品食谱菜谱菜单下载,就来红动中国,最后更新于2021-12-21 22:53:26。https://so.redocn.com/caipu/cab3c6d7b2cbc6d7b2cbb5a5.htm
7.冷菜菜谱模版图片冷菜菜谱模版素材冷菜菜谱模版模板免费下载六图网为您提供1337张冷菜菜谱模版设计作品免费下载服务,您还可以找到冷菜菜谱模版图片、冷菜菜谱模版素材、冷菜菜谱模版模板等设计素材,我们为您提供冷菜菜谱模版图片下载,冷菜菜谱模版模板下载、冷菜菜谱模版素材下载等服务!https://m.16pic.com/sucai/6249914.html?from=singlemessage
8.[川菜菜谱]图片免费下载川菜菜谱素材川菜菜谱模板千图网为您找到177张川菜菜谱相关素材,千图网还提供川菜菜谱图片,川菜菜谱素材, 川菜菜谱模板等免费下载服务,千图网是国内专业创意营销服务交易平台,一站式解决企业营销数字化、协同化,实现营销转化效果增长!https://m.58pic.com/tupian/chuancaicaipu.html
9.菜单菜谱模版制作ha99菜单菜谱模版制作 ha99 南京 / 平面设计师 / 2年前 / 97 浏览 版权 私信 关注 菜单菜谱模版制作 ha99 关注 可能感兴趣的人 下次默认收起 猪仙森 南京 |平面设计师 创作 31 粉丝 7076 关注 吴斌猛 厦门 |平面设计师 创作 10 粉丝 7145 关注 绵阳周杰伦 成都 |平面设计师 创作 37 粉丝 4183 关注 阿兹猫https://www.zcool.com.cn/work/ZNjI3NTQ2MTI=.html
10.菜单菜谱模版设计图片专题,菜单菜谱模版设计下载菜单 菜谱模版设计图片专题,菜单 菜谱模版设计图片下载,昵图网:图片共享和图片交易中心https://www.nipic.com/zhuanti/812705.html
11.餐饮菜单菜谱模版图片免费下载觅元素为您提供餐饮菜单菜谱模版图片免费下载,此作品编号为vcsqtjnpnn,图片大小为 0.87M,图片规格为 5622*3697 | 762dpi,下载更多图片素材就来觅元素!https://www.51yuansu.com/bg/vcsqtjnpnn.html
12.家常菜菜谱模版家常菜菜谱模版 设计模板共享与免费下载网站-素材公社(www.tooopen.com)https://www.tooopen.com/view/1681045.html
13.菜谱网站模版菜谱网站源码华为云为你分享云计算行业信息,包含产品介绍、用户指南、开发指南、最佳实践和常见问题等文档,方便快速查找定位问题与能力成长,并提供相关资料和解决方案。本页面关键词:菜谱网站模版。https://www.huaweicloud.com/theme/713118-2-C-undefined
14.每周~食谱第十三周菜谱HEALTHY BODY 精美校园 吃在四中 HEALTHY FOR YOU 第十三周菜谱 一日三餐,粒粒可馨。 认真吃饭,好好成长。 周 一 食 谱 NICE FOOD 午餐: 肉绍炒饭 青豆烧牛肉 番茄炒蛋 排骨萝卜汤 周 二 食 谱 NICE FOOD 午餐: 土豆粉蒸肉(土豆少,肉多) 杏鲍菇炒肉片 https://mp.weixin.qq.com/s?__biz=MzI1OTU4MTQ4NQ==&mid=2247507858&idx=4&sn=20013272c66dbd09b8ebd7efe7bf3c83&chksm=eb0e8551a47dfa515535d3940c26589817f6a473126b0595e10532220cb4bd4d4e010c9451a3&scene=27
15.餐饮菜单菜谱模版> 餐饮菜单菜谱模版 版权声明:当图网仅对作品中独创性部分享有著作权,对作品中含有的国旗、国歌、国徽,军旗、军歌、军徽等政治元素不享有权利,仅作为作品整体效果的示例展示,禁止商用。另外您必须遵循相关法律法规规定的使用范围和使用方式,禁止以任何形式歪曲、篡改。 立即https://www.99ppt.com/P_1987395.html
16.菜谱设计模版下载饭店炒菜菜单模板菜谱简介PSD素材 PSD 开始下载 菜馆菜谱设计模板矢量图 CDR 开始下载 简约大气菜谱设计模板矢量图 CDR 开始下载 KTV酒水单价目表设计模板PSD素材 PSD 开始下载 高档菜谱设计模板矢量图 CDR 开始下载 实用菜谱设计模板矢量图 CDR 开始下载 大气简约菜谱设计模板矢量图 CDR 开始下载 实用https://www.aaatu.com/zhuantitu/1727557881.html
17.菜单菜谱半悬ep的菜单-菜谱画板,该画板属于花瓣网未知相关类别的资源,其中共收集了323关于菜单-菜谱相关的图片素材资源,共被8人关注。花瓣网, 设计师寻找灵感的天堂!https://m.huaban.com/boards/67800024
18.食堂菜谱表格模版腐竹肉丸、土豆丝、青菜水笋炒肉、豆角炒肉、付子瓜、青菜卤鸭腿、香菇炒肉、萝卜丝、青菜西芹猪耳、豆角炒肉、酸辣粉、青菜卤鸡腿、洋葱肉卷、红烧冬瓜、青菜青椒炒烤鸭、红萝卜炒肉、地瓜、青菜西红柿蛋汤紫菜蛋汤猪红豆腐汤酸菜肉末汤鱼头豆腐汤大骨胡萝卜汤酸菜豆腐汤豆浆、鸡蛋、馒头、葱油饼每周菜谱 (从12月https://www.renrendoc.com/paper/88272879.html
19.中式家常菜菜单设计模板浏览本次宣传单|折页作品还为你推荐家常菜单,川菜菜单,湘菜菜单,美食菜单,川菜馆菜单,川菜菜谱菜单,菜单相似模版下载。 【注意】本作品为:"中式家常菜菜单设计模板"模板,模板内容仅为参考,如需印刷成实物请先认真校稿,避免造成不必要的经济损失。免费下载 收藏 br:do: 素材编号:23037 颜色模式:RGB 文件大小:https://www.zhengpic.com/sucai/23037.html
20.餐厅菜单设计免费餐厅菜单设计模板在线餐厅菜单制作设计软件MAKA是全球领先的创意设计工具和内容营销平台,其海量海报模版被3000万+中小企业用户所创作和分享,MAKA海量海报适用于门店经营、商家促销、招生培训、人力行政、业务介绍等多种营销场景,您可根据自己的行业、产品、推广人群,从MAKA海报中选择最合适的精美模版,MAKA海报操作简单、上手容易更是设计小白、职场人士必备的设计营https://www.maka.im/zhinan/cantingcaidna
21.菜单菜谱图片eps平面设计模版素材免费下载格式:eps 文件体积 :3m 爱给网提供海量的模板大全资源素材免费下载, 本次作品为eps 格式的菜单 菜谱图片, 本站编号36965369, 该模板大全素材大小为3m, 更多精彩模板大全素材,尽在爱给网。 浏览本次作品的您可能还对 菜谱画册(封面)菜单画册按形式 感兴趣。https://www.aigei.com/item/cai_dan_cai_p_22.html
22.湘菜菜谱菜单cdr矢量模版下载本素材作品名称为湘菜菜谱菜单cdr矢量模版下载,素材编号是4932905,是一张格式为:cdr ,可以使用等软件打开,颜色模式为RGB的作品。https://www.sucai999.com/sucai/4932905.html
23.菜单菜谱设计图片菜谱设计画册装帧菜单菜谱设计图片,菜单菜谱设计 菜单 菜谱菜单 菜谱模板下载 菜谱模版 菜谱素材下载 饭店菜谱 高档菜谱 美食菜谱 高档菜谱 饭店菜谱 高档菜谱素材 高档菜谱模板 菜谱模版 菜谱素材下载 美食菜谱 菜谱菜单 菜单 菜谱矢量素材 菜谱模板下载 画册 菜单菜谱设计整套 平面广告,图https://www.photophoto.cn/pic/01644848.html
24.英语菜单ae模板英语菜单pr模板英语菜单视频素材原创mg早教暑期暑假培训班英语课程学习少儿直播课动画ae模版 01:14 获取授权免费下载 下载视频 一位亚裔女士试图用刀劈开一只螃蟹自制的开胃菜菜单泰国的海鲜获取授权企业VIP免费下载 下载视频 简约餐厅菜单菜谱推介图文展示 01:45 获取授权免费下载 下载视频 虾在传统的炉子上烤泰国海鲜菜单味道鲜美泰国街头小吃https://588ku.com/video/1-yingyucaidan-0-0-pr-0-0/
25.菜谱本范文范文5篇(全文)降本增效点(范文模版) 第3篇 一、办公费用方面: 1、提倡无纸化办公、节约办公用纸,尽量采用电子文档保存和传阅方式、打印文件用纸均采用双面打印,减少印错、印坏甚至印多的浪费现象。通过以下小措施减少浪费: (1)排版减少页码数量,如缩小页边距和行间距、缩小字号;(2)尽可能双面使用;(3)废纸进行回收再利用。 https://www.99xueshu.com/w/filexpkk2ldn.html
26.花生酱饼干的做法花生酱饼干(饼干模版)花生酱饼干怎么做菜谱花生酱饼干(饼干模版) “这一款花生酱饼干,用了一半糖粉一半白砂糖,吃起来有砂糖的颗粒感,又是别一种感受” 食材明细 主料 1 准备原料 2 黄油放室温软化,用打蛋器略略搅打 3 加入糖粉和白砂糖 4 用打蛋器搅打至体积膨松,颜色发白 5 加入蛋液https://home.meishichina.com/recipe-62465.html
27.彩色菜单设计样本菜单制作菜谱设计菜谱设计菜谱下载我要购买 放大观看 我要购买 放大观看 返回上一页 返回制卡模版主页 返回中国证卡网首页 我要购买 放大观看 我要购买 放大观看 我要购买 放大观看 我要购买 放大观看 精美高档菜牌设计样稿,实用的设计,全新数码图片,文字可以套用,1张光盘,包含快递费100元/套。返回上一页 返回制卡模版主页 返回中国证卡网首页 http://www.kawww.com/moban/caidan/caidan.htm
28.君厨电子菜谱相似应用下载成本优势: 传统菜谱制作价格不菲且须经常翻新,修改,更换,且要耗费大量的精力,财力;电子菜单按3年使用时间算,综合应用成本远低于传统菜谱. 更新方便:可随时变更菜品,菜价,图片,说明,可随意添加新品,促销信息,避免反复制作菜谱的繁琐和重复投资. 服务保障: 系统功能将不断升级,提供新增备菜谱模版,提供定制化界面,管https://m.wandoujia.com/apps/261333