Angular.js浅谈
至今博主对于MVVM框架比较了解的就只能算有Angular了,首先给大家明确一个概念,Angular1.x才能叫Angular.js,而Angular2、4、5都直接叫Angular了,因为从2开始已经是用TypeScript开发的了,不能再称它为js框架,值得肯定的是Ng2比Ng1.x的确更强大,更加规范,开发出来的应用的性能也相对变强了些,不过Ng2的太过激进的变动使得框架使用复杂度变大,1.x的用户相当于要重新学习一种开发模式,用户流失严重。
今天呢,我不在这里做具体的功能介绍,这些没什么意思,就说一下Angular.js的优缺点吧~
优点:
首先Angular.js是前端三大框架最早出来的,这意味着它是前端这类框架创始的始祖,这个历史地位还是值得我们尊重的。
1.它创新性地做出了双向绑定的开发方式,{{}}这种写法就是Angular率先提出的,这种可以双向绑定js里面的“变量”和HTML的数据显示(这样不需要我们再去自己操作dom,就可以更新页面)
2.实现了依赖注入(依赖反转,由函数来决定要什么依赖)
缺点:
由于Angular太早出现,一些核心的代码还是过于陈旧,从而有一些Vue、React没有的Bug
1.事件、赋值、ng-repeat不能同时使用
<input type="button" ng-click="now=$index" ng-repeat="(k,v) in json" value="{{k}}">
以上会使得$scope.now无法赋值成功,这当然不是我们的问题,Vue,React,Ng2+都不会出现这种问题,要解决这个问题,我们要换一种写法:
<input type="button" ng-click="setIndex($index)" ng-repeat="(k,v) in json" value="{{k}}">
调用函数在函数内部完成赋值的工作。
2.异步数据不会自动同步
由于Angular1.x的双向绑定依然使用旧的“脏检查”,而不是新的Observation,如果我们自己写异步获取数据,或者其他库的异步获取数据(例如JQ的$.ajax({})),异步修改$scope上的数据,HTML上是无法自动更新的,我们需要在修改后,手动调用一次$scope.$apply(),当然我们可以使用Angular提供的$http,就可以不用写手动触发脏检查了。
3.$http.post的Content-Type
Angular $http.post模块默认设置的Header['Content-Type'],居然是application/json,这个是大部分服务器不认,传统的服务器认的是application/x-www-form-urlencoded
所以我们还要把默认设置自己给设置一遍:
angular.module('common',[]).config(function($httpProvider){
$httpProvider.defaults.transformRequest=function(data){
let temp = [];
for(i in data){
temp.push(encodeURIComponent(i)+'='+encodeURIComponent(data[i]));
}
return temp.join('&');
}
$httpProvider.defaults.headers.post['Content-Type']='application/x-www-form-urlencoded';
})
我们要设置好transformRequest(数据传出前的格式转换)和headers.post['Content-Type'](数据格式是哪种),设置好了之后我们之后写module的时候直接引入依赖就可以了:
angular.module('test1',['common']);
4.$http.jsonp 麻烦
let mod = angular.module('test',[]);
mod.controller('test_c',function($scope,$http,$sce){
$scope.arr=[];
$scope.keyword="";
$scope.$watch('keyword',function(){
let url = $sce.trustAsResourceUrl(`https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=${$scope.keyword}`);
$http.jsonp(url,{jsonpCallbackParam:'cb'}).then(res=>{
$scope.arr = res.data.s;
},err=>{
alert('错了');
});
})
});
jsonp本来就是不安全的,但是感觉多此一举的需要用$sce.trustAsResourceUrl包裹一下url,才能用{jsonpCallbackParam:'cb'}配置callback的名字。
Angular.js浅谈的更多相关文章
- AngularJS进阶(二十五)requirejs + angular + angular-route 浅谈HTML5单页面架构
requirejs + angular + angular-route 浅谈HTML5单页面架构 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又 ...
- js—浅谈方法和思路的重要性(首篇求大佬支持)
js-浅谈方法和思路的重要性 学了这么久的js,我从老师的,同学的代码中发现,老师写的代码比我们的要清楚的很多,基本上没有太多累赘啊,能少的没有少啊等等..... 废话不多说,下面我们来看看这个我的一 ...
- angular指令浅谈
今天在闲暇时间再次对angularjs的指令进行了初探,不探不知道一探吓一跳啊, 就一个简单的指令整整难住我了两个小时,先不说代码的逻辑是否复杂,就一些内部的一些实现让我看起来都是头疼的不行啊,不过最 ...
- salesforce lightning零基础学习(十) Aura Js 浅谈三: $A、Action、Util篇
前两篇分别介绍了Component类以及Event类,此篇将会说一下 $A , Action以及 Util. 一. Action Action类通常用于和apex后台交互,设置参数,调用后台以及对结 ...
- salesforce lightning零基础学习(九) Aura Js 浅谈二: Event篇
上一篇介绍了Aura Framework中 Component类的部分方法,本篇将要介绍Event常用的方法. 1. setParam (String key , Object value):设置事件 ...
- salesforce lightning零基础学习(八) Aura Js 浅谈一: Component篇
我们在开发lightning的时候,常常会在controller.js中写 component.get('v.label'), component.set('v.label','xxValue'); ...
- node.js浅谈
相信大家对node.js也很不陌生吧,现在我来总结一下常用的吧~ 我们Web全栈工程师最多的就是用Node作为后台了,Node.js虽然可以作为后台语言,但是相对于Java那些老牌后台语言真是一点优势 ...
- JS浅谈原始值与引用值操作
值的操作分为三大类:复制,传递,比较 一:复制 原始值 let a = 10; let b = a; 注释:2018-7-30 17:33:49 1 原始类型的值都是存放在栈内存当中,所以他们的赋值操 ...
- JS 浅谈函数柯里化,不明觉厉
在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术.这个技术由 Christopher ...
随机推荐
- Linux中tty、pty、pts的概念区别 转载
基本概念: > tty(终端设备的统称): tty一词源于Teletypes,或teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西 ...
- 把Excel的数据导入到数据库
将Excel作为数据源,将数据导入数据库,是SSIS的一个简单的应用,下图是示例Excel,数据列是code和name 第一部分,Excel中的数据类型是数值类型 1,使用SSDT创建一个packag ...
- LeetCode Generate Parentheses (DFS)
题意 Given n pairs of parentheses, write a function to generate all combinations of well-formed parent ...
- 阿里云centos 安装禅道
下载 我的阿里云服务器系统是 centos6.8 64 位,下载的禅道版本是 Linux 64位一键安装包(适用于Linux 64位) 由于阿里云服务器没桌面,所以下载用不了浏览器,可考虑在本地下载后 ...
- 小白之selenium+python关于cookies绕开登录2
首先,由于新开始在博客园中写随笔,可能在内容的布局方面就不太懂,导致布局很丑,各位见谅,但是字还是原来的那字,内容还是原来的内容,少了点包装, 下面是对cookie的扩展知识 1.配置文件存储在哪里? ...
- 按键精灵对APP自动化测试(下)
上一篇介绍了安卓app上使用按键精灵的实践,这里再来说说苹果上的app. 由于iOS相关工具对操作系统的限制,目前在iOS10.0.2系统上应用成功. 二. 苹果手机按键精灵APP录制 适 ...
- 升级framework4.0后form认证票据失效的问题
好久没来了,密码都差点忘了,顺便记录下今天配置环境碰到的小问题 网站使用的form authentication做SSO登录,登录域名使用的framework20配置环境 一个栏目升级为4.0环境后, ...
- hadoop-lzo 安装配置
在hive中要想使用lzo的格式,需要配置安装好lzo工具并且在hadoop的core-site.xml与mapred-site.xml中配置相应的配置 一.编译安装lzo与lzop 在 ...
- Linux内核分析 笔记三 构造一个简单的Linux系统MenuOS ——by王玥
一.知识点总结 (一)Linux源代码简介 arch/x86目录下的代码是我们重点关注的 内核启动相关代码都在init目录下 start_kernel函数相当于普通C程序的main函数 linux的核 ...
- php插入中文数据到MySQL乱码
事情是这样的:我在本地的测试成功了,放到服务器测试,发现服务器的数据库里的中文竟然乱码了. 我进行了以下几步基本的做法: PHP文件改为utf-8的格式. 加入header("Content ...