angular.js浅谈

张啊咩      2022-02-16     309

关键词:

至今博主对于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 和 require.js - 如何导航?

】angular.js和require.js-如何导航?【英文标题】:angular.jsandrequire.js-howtonavigate?【发布时间】:2013-05-0305:09:21【问题描述】:我正在试验angular.js和require.js。我想做的是一个简单的登录表单模块。我的项目基于https://github.com/partap/ang... 查看详情

Angular JS 错误 angular.js:38Uncaught 错误:[$injector:modulerr]

】AngularJS错误angular.js:38Uncaught错误:[$injector:modulerr]【英文标题】:AngularJSerrorangular.js:38UncaughtError:[$injector:modulerr]【发布时间】:2017-04-1011:20:59【问题描述】:在加载我的index.html时,我遇到了这个错误index.html<html><head>T... 查看详情

angular.js的angular.copyangular.extendangular.merge

<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title></title></head><body><scriptsrc="js/angular.min.js"type="text/javascript"charset="utf-8">< 查看详情

angular.js初步认知

第一部分 Angular.js简介Angular.js是一款基于JavaScript语言的框架,目的是为了克服HTML在构建应用上的不足.注意这里说的Angular.js是框架而不是类库,类库和框架都是用来解决静态页面技术上构建动态应用的问题的,但是两者却不是一... 查看详情

Angular.js 和 Fabric.js:一旦代码移动到 Angular 指令,Fabric 画布就会改变行为

】Angular.js和Fabric.js:一旦代码移动到Angular指令,Fabric画布就会改变行为【英文标题】:Angular.jsandFabric.js:FabriccanvaschangesbehavioroncecodeismovedtoaAngularDirective【发布时间】:2013-09-1204:30:18【问题描述】:我有一个简单的AngularJS/FabricJs... 查看详情

angular.js渲染

angular.js小常识 具体看代码,转载请备注来源。html结构<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><%@includefile="../host.jsp"%><%@includefile="../common.jsp"%> 查看详情

angular.js的初步认识

MVC模式模型(model)-视图(view)-控制器(controller)Angular.js采用了MVC设计模式的开源js框架1、如何在angular.js建立自己的模块(model),控制器(controller),操作模型数据。  <headlang="en"><metacharset="UTF-8"><title></title>< 查看详情

跨域ajax调用失败-Angular.js节点js + express

】跨域ajax调用失败-Angular.js节点js+express【英文标题】:Crossdomainajaxcallfailed-Angular.jsnodejs+express【发布时间】:2013-11-2609:54:49【问题描述】:我正在尝试从angular.js模块到nodejs+express服务器进行跨域调用,但我收到了未经授权的错误... 查看详情

如何将 angular.js 模块导入 Angular 应用程序?

】如何将angular.js模块导入Angular应用程序?【英文标题】:HowcanIimportanangular.jsmoduleintoanangularapplication?【发布时间】:2020-12-1415:36:44【问题描述】:目标:我想将以下轮播example包含到Angular2+组件中。包含此轮播的步骤涉及导入“t... 查看详情

Angular.js 和 DAO 模式

】Angular.js和DAO模式【英文标题】:Angular.jsandDAOpattern【发布时间】:2013-04-1913:19:50【问题描述】:首先我必须承认我对Angular.js很陌生,而且我之前没有使用过任何新一代的js框架,例如Backbone或Knockout。我正在创建一个使用RESTfulA... 查看详情

将 JSON 从 angular.js 发送到 node.js

】将JSON从angular.js发送到node.js【英文标题】:SendJSONfromangular.jstonode.js【发布时间】:2018-06-2215:54:09【问题描述】:如果我将JSON从前端angular.js发送到后端node.js,它会给我一个错误:TypeError:Cannotreadpropertyusernameofundefined。我也在使... 查看详情

Angular2 与 Stomp.js

】Angular2与Stomp.js【英文标题】:Angular2withStomp.js【发布时间】:2016-09-2112:39:56【问题描述】:我正在寻找Stomp.js或类似的库。我没有发现使用angular2.rc6/final示例或lib。我怎样才能重新放置Stomp.js其他东西?在我之前的Angular1.X项目... 查看详情

Angular.js 和 Adsense

】Angular.js和Adsense【英文标题】:Angular.js&Adsense【发布时间】:2013-06-2907:31:07【问题描述】:我正在尝试在我的angular.js应用上投放广告,但我做了一些阅读,发现无法仅复制和粘贴普通的adsense代码。我听说您应该“将其包装... 查看详情

tokenInput 作为 angular.js 指令

】tokenInput作为angular.js指令【英文标题】:tokenInputasangular.jsdirective【发布时间】:2013-08-2821:18:02【问题描述】:我正在尝试从JamesSmith的tokenInputJquery插件创建一个angular.js指令:http://loopj.com/jquery-tokeninput这是我目前所拥有的:antdn... 查看详情

angular2 zone.js 进行自动 sock.js 调用

】angular2zone.js进行自动sock.js调用【英文标题】:angular2zone.jsmakingautomaticsock.jscalls【发布时间】:2016-04-2920:22:33【问题描述】:嗨,我正在使用基于这个种子https://github.com/angular/angular2-seed的Angular2和webpack我不太确定使用zone.js的角... 查看详情

无法使用 Angular.js 激活菜单栏

】无法使用Angular.js激活菜单栏【英文标题】:CouldnotactivethemenubarusingAngular.js【发布时间】:2018-07-0101:04:14【问题描述】:我遇到了一个问题。我无法使用Angular.js激活正确的菜单栏。我有一些菜单、子菜单和子子菜单,但根据要... 查看详情

angular.js $resources 设置授权头

】angular.js$resources设置授权头【英文标题】:angular.js$resourcessettingAuthorizationheader【发布时间】:2014-07-1107:30:49【问题描述】:js我正在尝试做的是向服务器发出RESTAPI请求。请求应该是\'GET\'方法并包含\'Authorization\'标头。我与REST... 查看详情

angular.js的依赖注入解析

本教程使用AngularJS版本:1.5.3    angularjs GitHub: https://github.com/angular/angular.js/    AngularJs下载地址:https://angularjs.org/    &nbs 查看详情