首页 技术 正文
技术 2022年11月18日
0 收藏 613 点赞 4,809 浏览 2082 个字

至今博主对于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的名字。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,905
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,430
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,247
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,058
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,690
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,727