位置: 编程技术 - 正文

简介可以自动完成UI的AngularJS工具angular-smarty(简介生成)

编辑:rootadmin

推荐整理分享简介可以自动完成UI的AngularJS工具angular-smarty(简介生成),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:简介可以自动完成么,自动简历,自动做简历,简介怎么弄,简介怎么编辑,自动做简历,自动做简历,简介可以自动完成么,内容如对您有帮助,希望把文章链接给更多的朋友!

我们最近为我们的论坛增加了一个自动完成功能(称为Smarty),在要求专业人员简介的主页上。这是一个超有用的功能,因为它有助于我们将用户导航到他们真正想去的地方。它很有意思,也是用AngularJS构建的!

我们希望Smarty能够:

通过用户的给定输入 (一个前缀),通过一个HTTP请求后自动提供建议 显示一个建议的下拉列表 当用户输入时更新 足够快,能够跟得上用户的输入 导航直观且能够关闭 可重用

以往没有AngularJS的经验,这个项目是我使用这个框架的入门项目。它真的成为了一次宝贵的学习经验,而且我发现这个框架许多方面相互借鉴地很好且能很好地符合我上面列出的要求。当然,还有一些问题尚在学习过程中!

AngularJS的乐趣所在

我最喜欢Angular的一点是它是如何分解成具有明确目的的概念的。Smarty广泛使用了其中的两个概念——Directives 和 Services。Directive和DOM绑定在了一起,用来管理和元素之间的交互;而Service通过依赖注入的方式为Controller和Directive提供了独立的可以重用的逻辑。

Angular提供了很多内建的Directive和Service,我们在这个项目中使用到了其中的多个。

为了显示建议(见要求2),我们使用了ngIf 和 ngRepeat 指令来有条件的显示和填充建议下来列表。

为了实现当用户输入的时候更新建议内容(见要求3),我们使用了ngModel 指令将$scope上前缀变量上输入元素的请求和Scope上的$watch方法双向绑定起来,用来监听前缀的变化。

我们需要考虑的一件事是这个自动完成功能的更新速度可能跟不上用户的输入速度(见要求4)。因为每当前缀的值发生变化时,Smarty都要发送一个HTTP请求(通过内建的$http Service)。我们决定用 $http 的可选配置参数($http.get(requestUrl, {cache: true}))来缓存结果。这是提升性能的一个很简单的方法。

我们还写了自定义的Directive和Service来满足我们的特定需求:

smartySuggestor Service:smartySuggestor 提供了一个getSmartySuggestions()函数,用来接受用户生成的前缀作为它的参数,并通过http请求访问我们后端的suggestor服务来得到自动完成的建议。(见要求1)。

smartyInput Directive: 我们所面临的一个挑战是,定义出一个用户和下拉列表之间的所有可能的交互,并且写测试用例,以确保在开发期间和开发之后,这些功能都是完好的。我们使用一个Directive(smartyInput)来包含用户和下拉列表之间所有可能发生的交互(见要求6),同时,我们使用内建的ng-mouseover 和 ng-click 指令(Directive)来定义下拉列表和鼠标事件之间的交互。

正如我前边所提到的,我们所面临的一个挑战是我们要确保我们没有破坏掉所有用户和下拉列表之间可能发生的交互方式。为了追踪这些用户交互,并确保我们没有在开发的过程中破坏掉它,我们使用了Jasmine测试框架。Jasmine结合这angular-mocks一块儿使用,可以方便我们为smarty写包含描述的测试用例,像我们可以为下拉列表写“点击外部应该会消失”("should disappear on outside click"),可以为请求表单的输入写“按回车时应该填充上合适的值” (“should, on enter, fill with the appropriate value”)。

学习总结

尽管简洁实用的AngularJS框架现在对我来讲,是可以轻松读懂的,但是确实要花些时间来学习。隔离作用域绑定指令符和promise是我学习过程中特别棘手的两项专题。当我研究隔离作用域时,我发现自己十分希望能看到更多的关于人们如何在他们的项目中使用不同绑定的例子,所以下面我为每种绑定类型给出一个例子。=:本地和父作用域之间的双向数据绑定

控制器:

HTML:

SmartyInput指令符:

简介可以自动完成UI的AngularJS工具angular-smarty(简介生成)

SmartyInput双向绑定指令符将位于控制器作用域的selected绑定到指令作用域的index索引上面,这样可以使得在index索引(建议列表中当前选定的索引)中的变化结果与指令(例如用户按向上/向下箭头)的相互作用会传播到控制器。

&: 本地与父作用域之间的单向数据绑定

控制器:

HTML:

SmartyInput指令符:

SmartyInput指令符将控制器作用域中的setSelected()函数绑定到指令作用域中的select()函数上,这样可以使指令符在不改变setSelected()函数的情况下使用它。@:将计算表达式绑定到本地作用域

控制器:

HTML:

SmartySuggestions指令符:

通过SmartySuggestions指令符,可在建议菜单中显示prefix的值,所以此处使用计算表达式{{prefix}}。这种绑定方式在多项复杂表达式中更常用,比如:next-index=“{{selected + 1}}”。

Promises

promise是用于执行异步任务的技术。一个promise具有一个名为then()的方法,该方法在promise执行时会作为被执行的的回调函数的一个参数。当异步任务完成,promise会将一段消息传给那个回调函数。当用户输入的prefix前缀中检测到更改,则promise就会出现在Smarty的代码中,然后我们会用$http执行一个GET请求,用来更新显示给用户建议的列表。

这个过程看起来是这样的:

当$scope.$watch在$scope.prefix(请注意,此处绑定到用户UI输入界面)的值中注册了一个更改,此时会调用getSmartySuggesction()。

在getSmartySuggesctions()中,$http.get会返回一个参与服务器响应的promise。

服务器响应看起来是这样的:

接下来,我们会调用存在于promise中的then()方法,在解析服务器响应回调中进行传递。then()方法返回一个新的promise,它处理了解析过的响应,并存储到通过getSmartySuggestions()返回的promise中。

解析过的响应看起来是这样的:[“Portrait Photography”, “Commercial Photography”, “Pet Photography”, “Event Photography”, “Headshot Photography”]。

最终,回到$scope.$watch,我们调用promise中的then()方法,为变量suggestions分配这些解析过的响应。

使用JavaScript的AngularJS库编写hello world的方法 本文展示了AngularJS框架实现的helloworld代码示例.如下是一些你在看HelloWorld示例和接下来的代码示例时需要重点关注的方面.ng-app,ng-controller,ng-model指令带

使用Raygun来自动追踪AngularJS中的异常 Angular.js取得的巨大成就之一是实用的异常抛出,因为异常信息经常能够准确的表明你的代码为什么崩溃了。运行于世界各地的众多浏览器的大型客户端w

简述AngularJS相关的一些编程思想 在过去的几个月里,我一直遨游于Angular的世界。如今回想起来,很难想象在没有类似于Angular.js,Backbone.js以及其伙伴Underscore.js这些数据绑定框架下我每

标签: 简介生成

本文链接地址:https://www.jiuchutong.com/biancheng/380449.html 转载请保留说明!

上一篇:浅谈javascript构造函数与实例化对象(javascript构成)

下一篇:使用JavaScript的AngularJS库编写hello world的方法(javascript什么用)

  • 汽车购置税计算器2019
  • 增值税附加税减免
  • 工资申报是当月申报当月的吗
  • 小规模企业现金流量表
  • 建筑工程企业人才引进可以引进医药行业吗
  • 新车检测费能入什么科目
  • 融资租赁确认的利息收入需要交增值税吗
  • 预缴增值税 进项税扣除
  • 应交税费减免科目金额的计算
  • 单位购买预付卡
  • 开了负数发票增值税申报表怎么填
  • 企业所得税季报是全年累计吗
  • 租赁违法处理
  • 财产保全包括支付宝吗
  • 固定资产拆除后账务处理
  • 公司从基本户转钱到一般户走流程?
  • 被代持股份怎么退出
  • 转出未交增值税怎么算
  • 怎么分辨是否清真食品
  • 盈余公积金什么时候计提
  • 原材料账户可以按什么进行明细核算
  • 会计报表附表属于会计报表内容吗
  • 非企业性单位包括哪些单位
  • 期末增值税如何结转
  • 在win10中怎么从edge旧ie浏览器
  • linux怎么增加磁盘空间
  • 个体工商户应申报套餐无增值税吗
  • win11预览版体验
  • 多提附加税跨年怎么申报
  • 固定资产进项税额一次性抵扣
  • 报销员工餐费属于哪个科目
  • 收到汇票结余会怎么样
  • 企业内部转账通知单
  • 摇树的英文是什么
  • 物流费属于什么税目
  • 错误解决方法
  • 微信随机红包表情包怎么弄
  • 社会保险费的征收机构由什么规定
  • 企业所得税汇算清缴操作流程
  • 招待客户住宿费进项税可以抵扣吗
  • mysql常用命令汇总
  • 社会团体会费票据查询
  • 用友会计科目增加二级
  • 增值税发票有哪些项目
  • 房租押金需要缴税吗
  • 清理扬声器
  • 冲去年管理费用
  • 补交以前年度企业所得税怎么入账
  • 期末调汇的会计怎么做账
  • 房地产企业怎么交房产税
  • 在税收方面属于什么领域
  • 暂估入库后发票来不了
  • 工程施工怎么结转,用友自动结转吗
  • 资本公积资本溢价怎么算
  • 月末结转后应交税费应交增值税一般无余额
  • 待认证进项税额和待抵扣进项税额的区别
  • 预付账款是谁欠谁
  • 事业编制可以带计算器吗
  • 现金日记账的对账工作有哪些
  • 私营公司预收账款怎么算
  • windowsxp怎么隐藏桌面图标
  • 在linux操作系统中
  • win10 mobile下载
  • ftpr
  • win8系统没有声音怎么办
  • Android Build.prop
  • android入门视频教程
  • windows2003服务器管理器在哪里
  • javascript图片
  • 安卓自定义acl文件
  • jquery动态设置div高度
  • android 保存密码
  • 境外取得收入申报期限
  • 成都税务企业号公众号
  • 成都市税务局公示名单公布
  • 湖南省税务局发票辨伪系统
  • 电子税务局怎么添加银行账户信息
  • 美丽重生李晓晓免费阅读
  • 微信如何查询个人名下所有银行卡
  • 调研报告与调研文章的区别
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设