iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >不可错过的Angular应用技巧有哪些
  • 498
分享到

不可错过的Angular应用技巧有哪些

2024-04-02 19:04:59 498人浏览 八月长安
摘要

本篇文章给大家分享的是有关不可错过的angular应用技巧有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。angular的核心思想是通过数

本篇文章给大家分享的是有关不可错过的angular应用技巧有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

angular的核心思想是通过数据驱动一切,其他东西都是数据的延伸。套用javascript一切皆对象的思想,在angular中可以说一切皆数据。 

(1) requirejs以及Yeoman关于项目构建

在刚开始接触或者使用Angular的时候,总会疑惑与类似的问题,我实践的答案是不需要requirejs或者Yeoman.前者不使用,因为angular本身有module的实现.后者是因为Angular组织结构以及项目构建完全不必要弄得如此繁杂,手写或者在GitHub上pull一个seed项目即可.

(2) 如何组织项目结构

这个问题有点废材,因为完全因人因项目而异.个人推荐的是两种组织结构,一种按照代码功能,也就是controller都放在一个文件夹下,services都放在一个文件夹下.另一种则遵循所实现的功能,比如User就把对应的template,services,controller都放在User文件夹下.

两种都可以,从维护角度上看第二种会更好一些.

(3) controller以及service的划分

这里controller通常就是一个页面一个controller,假如一个页面有公共的部分,公共部分永远使用一个controller.对于service要划分成两个部分,一个是于服务器交互数据的service,另一个是一些功能性common的内容,其中放置一些自己写的可复用的服务,类似于notify等.

至于service要不要按照功能和模块再进一步划分,这个就看项目来了.

(4) Angular插件以及库的使用

对于一个项目所有的东西都去网上拿现成的肯定不现实,但是所有的东西都自己写就更不实际了.Angular的很多插件是由Angular团队开发出来或者一些人用Jquery插件封装的.我对于插件的观点很简单,如果拿来用赶紧需求可以满足就用,不能满足就自己写或者在已有插件上改进.

对于如果你调试几个小时还搞不定的插件,听我的劝,放弃它吧.大多数插件都是一些UI插件,大可不必追求繁杂,有时候简简单单的html控件也自有它简约的美.

如果你遇到Angular插件冲突,尤其是UI插件,大多数的情况下要放弃其中之一,比如angular-ui和angular-strap.

使用技巧

下面进入正文,我会列举出我在使用angular的过程中使用的一些技巧,会以场景的形式一一列举.这里对于Angular的一些基础概念我不会解释,本文是一些技巧性的东西,不是基础教程.

(1) angular中"{{}}"于pythonflask冲突

Python的flask使用的模板中,数据绑定也是通过两个"{"大括号,这就于angular的数据绑定有冲突.这个有两种解决方法,一种是修改angular的绑定标记,另一种就是修改flask的绑定标记,这里两种方案都给出.

修改angular:

$interpolateProvider.startSymbol('{[{').endSymbol('}]}');  // 将这句话加在config中即可,放在route的module中即可.这里将原来angular的{{ }}绑定,修改为通过{[{ }]}绑定.

修改flask:

class CustomFlask(Flask):      jinja_options = Flask.jinja_options.copy()      jinja_options.update(dict(          block_start_string='{%',          block_end_string='%}',          variable_start_string='{#',          variable_end_string='#}',          comment_start_string='<#',          comment_end_string='#>',      ))         app = CustomFlask(__name__, instance_path='/WEB')

这里我推荐修改flask,因为用了angular之后,前后端分离.flask的jinjia模板不再需要,同时如果你修改了Angular的绑定标记,其他的控件和库会有问题的.

(2) 去除url中总是默认带有"#"

在设置route的时候,开启HTML5模式.

angular.module('router', ['ngRoute'])  .config(['$routeProvider', '$locationProvider',    function($routeProvider, $locationProvider) {      $locationProvider.html5Mode(true);   // 设置一下这句即可    }  ]);

3) ng-click="expression"以及类似的指令,如何在expression中书写多个表达式?

比如我在一个ng-click中想要给2个变量赋值,通过";"分号分割即可:

<a ng-click="obja=1;objb=2"></a>

(4) $watch没有产生作用或者只生效一次

这种情况一般来说是监听一个字符串或者数字的时候会出现,$scope.$watch("name",function(){}).没有生效或者只生效一次,解决方法是$watch尽量监听的是一个对象,将你要监听的值附在一个Object下即可.

当你使用angular-ui中的modal时,这个比较明显.

(5) 希望ng-view的内容全页面显示

通常一个页面可能会有固定的top-menu或者sidebar,这类固定不变的部分,然后每次route变化的都是ng-view的template,如果一个页面希望整个页面完全显示它自己,不包括top-menu之类固定的部分.

这里通常是一个index.html和一个ng-view显示的template.html,top-menu和sidebar位于index.html中,将它们的显示隐藏通过ng-if绑定一个变量控制.

如果一个页面需要自己完全显示,不显示sidebar等,则在其controller中通过$scope.$emit向上发送一个消息,然后index页面的controller则通过$scope.$on监听消息,一旦听到那个消息,则改变控制sidebar显隐的变量.

也可以通过service做一个全局的变量控制,个人推荐还是通过消息广播的方式.

(6) 切记用ng-if代替ng-show

这是angular的一个小坑,也可以说是不大不小的一个坑.一些长列表数据,可能有一些东西是通过默认隐藏,点击显示的形式展现的.而这部分可控制显隐的内容中也会伴随很多数据绑定.这个在页面渲染的时候非常影响性能.

举一个列子,比如说通常angular建议一个页面的数据绑定不超过2000个,假如现在有一个页面直接绑定了2000个model,然后你加载,会发现非常卡.如果你将每100的model设置为ng-show,默认情况下不显示,你会发现还是很卡.

然后你将所有的ng-show换成ng-if,你会发现性能瞬间快的像两个应用.原因在ng-show还是会执行其中的所有绑定,ng-if则会在等于true,也就是显示的时候再去执行其中的绑定.这样一来性能就有很大的提高,我之前通过这个简单的修改,页面加载快了10倍左右.

所以在能使用ng-if的情况,用它代替所有的ng-show和ng-hide吧.

(7) 关于ng-bind-html

通常情况下为html元素绑定数据,有ng-bind就够了,但一些情境下需要绑定的不是一般的数据,而是html.那么ng-bind就不够用了,需要使用ng-bind-html,它会将内容作为html格式输出.比如想输出带有class的html,那么就使用ng-bind-html,而且还需要ngSanitize的配合,需要引入相应的文件.

(8) 获取ng-repeat数据filter后的结果

这个一般在搜索的时候需要用到,比如多重ng-repeat数据形成列表.然后filter一个字段,现在要得到filter之后的结果,有2中方式.

一种是在html的ng-repeat中类似这么写:

ng-repeat="food in foodCateGory._displayfoods = (foodCategory.foods | filter: { 'name': searchobj.foodfilter } | orderBy: food.sort_order)"

这样_displayfoods就是filter后的最终显示的结果.另一种方式是通过两套数据,一套写在controller中,然后filter以及orderBy都是在controller中操作,***操作的结果在用来ng-repeat.

***种方式比较方便,第二种方式更好,性能也好.

(9) ng-class以及ng-style通过判断赋值

根据变量的值决定是否应用某种class,以及不同的style样式.

ng-class="{'state-error':!foodFORM.foodstock.$valid}"  ng-style="{ color: i.color=='' || i.name=='活' ? 'default' : '#fff' }"

(10) form校验以input为例

angular的form可以通过input的HTML5属性进行校验,这里主要通过form以及input的name属性进行定,formname.inputname.$valid表示name为inputname的空间是否通过本身的属性校验.

(11) $resource和$http的$promise

$q.all([    resource.query().$promise,    resource2.query().$promise  ]).then(functon(success){    console.log(success);  },functon(error){    console.log(error);  });
foodFactory.food.save(f).$promise.then(function(result){    foodFactory.food.get({id:result.id}).$promise.then(function(data){    });  });

这个不解释了,直接看就可以了,注意$Http的promise需要手动返回,所以一般情况下都通过$resource.

(12) 仅$watch监听collection中的一个属性

$watch的第三个参数设置为true,即可deep watch.不过有时候其实不想或者不需要监听collection的全部属性.只要监视其中的一个或者几个,这时候通过for循环虽然可以循环$watch不过明显太挫.

通过下面这种写法就可以监控一个collection的单独一个object属性.

$scope.people = [      {          "groupname": "g1",           "persions": [              {                  "id": 1,                   "name": "bill"             },               {                  "id": 2,                   "name": "bill2"             }          ]      },       {          "groupname": "g2",           "persions": [              {                  "id": 3,                   "name": "bill3"             },               {                  "id": 4,                   "name": "bill4"             }          ]      }  ]     $scope.$watch(function($scope) {      return $scope.people.map(function(obj) {          return obj.persions.map(function(g){              return g.name          });      });  }, function (newVal) {      $scope.count++;      $scope.msg = 'person name was changed'+ $scope.count;  }, true);

(13) debounce防抖处理

这个对于频繁出发的处理非常有用,适用于类似ng-change,$watch的一些场景.比如根绝关键字即时搜索的场合,将$debounce封装为服务,直接调用接口,代码:http://jsfiddle.net/Warspawn/6K7Kd/

(14) 快速定位到某个位置

一般来讲页面内通过<a id="bottom"></a>这样的形式就可以结合js代码,实现快速定位.在angular中也是通过类似的原理实现,代码如下:

var old = $location.hash();  $location.hash('batchmenu-bottom');  $anchorScroll();  $location.hash(old);

这样写是因为直接location.hash会导致url变化,页面跳转,所以加了防止跳转的代码.

以上就是不可错过的Angular应用技巧有哪些,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网VUE频道。

--结束END--

本文标题: 不可错过的Angular应用技巧有哪些

本文链接: https://www.lsjlt.com/news/86225.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 不可错过的Angular应用技巧有哪些
    本篇文章给大家分享的是有关不可错过的Angular应用技巧有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。angular的核心思想是通过数...
    99+
    2024-04-02
  • 管理Angular项目的技巧有哪些
    这篇文章主要介绍“管理Angular项目的技巧有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“管理Angular项目的技巧有哪些”文章能帮助大家解决问题。1. 准守单一职责原则很多单应用程序核心...
    99+
    2023-07-04
  • 管理Angular项目的实用技巧有哪些
    这篇文章主要介绍“管理Angular项目的实用技巧有哪些”,在日常操作中,相信很多人在管理Angular项目的实用技巧有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”管理...
    99+
    2024-04-02
  • Css应用技巧有哪些
    这篇文章主要介绍了Css应用技巧有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.清除图片下方出现几像素的空白间隙方法1:代码如下:i...
    99+
    2024-04-02
  • 你可能不知道的CSS技巧有哪些
    这篇文章给大家介绍你可能不知道的CSS技巧有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 1.box-sizing:border-box 设置此属性后...
    99+
    2024-04-02
  • Angular单元测试编写的技巧有哪些
    这篇“Angular单元测试编写的技巧有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“...
    99+
    2024-04-02
  • VB.NET窗体应用技巧有哪些
    小编给大家分享一下VB.NET窗体应用技巧有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!打开 Visual Studio 2008在文件 (File) 菜单...
    99+
    2023-06-17
  • Linux应急响应技巧有哪些
    这篇文章主要介绍了Linux应急响应技巧有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。概述Linux环境下处理应急响应事件往往会更加的棘手,因为相比于Windows,L...
    99+
    2023-06-16
  • vue过渡效果使用的技巧有哪些
    本篇内容介绍了“vue过渡效果使用的技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!概念在进入/离开的过渡中, 会有6个class的...
    99+
    2023-07-04
  • mysql存储过程有哪些使用技巧
    mysql存储过程有哪些使用技巧?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!mysql存储过程使用技巧有:1、创建带in...
    99+
    2024-04-02
  • 有哪些有用的Python技巧
    本篇内容介绍了“有哪些有用的Python技巧”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 函数连续调用def add(...
    99+
    2023-06-16
  • Python 响应文件的技巧有哪些?
    Python 是一种强大的编程语言,可用于多种用途,其中包括处理文件。在本文中,我们将探讨 Python 中响应文件的一些技巧,包括如何打开文件、读取文件内容、写入文件以及关闭文件。 打开文件 在 Python 中,使用 open()...
    99+
    2023-09-03
    响应 文件 开发技术
  • 可扩展React项目的技巧有哪些
    本篇内容介绍了“可扩展React项目的技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 了解如...
    99+
    2024-04-02
  • 不常提及的HTML技巧有哪些
    这篇文章主要为大家展示了“不常提及的HTML技巧有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“不常提及的HTML技巧有哪些”这篇文章吧。图片懒加载图片懒加...
    99+
    2024-04-02
  • 使用Dart开发Flutter应用的技巧有哪些
    小编给大家分享一下使用Dart开发Flutter应用的技巧有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!发布模式判断判断当前环境是否为发布模式。const&...
    99+
    2023-06-04
  • html footer应用与布局技巧有哪些
    本文小编为大家详细介绍“html footer应用与布局技巧有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“html footer应用与布局技巧有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深...
    99+
    2024-04-02
  • IE中JavaScript DOM ready应用技巧有哪些
    IE中JavaScript DOM ready应用技巧有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能...
    99+
    2024-04-02
  • 关于PHP模板应用技巧有哪些
    关于PHP模板应用技巧有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。PHP经过长时间的发展,很多用户都很了解PHP了,这里我发表一下个人理解,和大家讨论讨论。我发现很...
    99+
    2023-06-17
  • VB.NET界面开发应用技巧有哪些
    这篇文章主要为大家展示了“VB.NET界面开发应用技巧有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“VB.NET界面开发应用技巧有哪些”这篇文章吧。VB.NET界面VB允许我们创建有多个界...
    99+
    2023-06-17
  • win10应用程序权限技巧有哪些
    这篇文章主要介绍“win10应用程序权限技巧有哪些”,在日常操作中,相信很多人在win10应用程序权限技巧有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”win10应用程序权限技巧有哪些”的疑惑有所帮助!...
    99+
    2023-07-01
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作