Closed Wscats closed 2 years ago
angular
var app = angular.module("app",[]); app.controller("indexCtrl",function($scope){ $scope.text = "Hello World" })
vue
new Vue({ el:"#demo", data:{ //code text:"Hello World" }, template:"<p>{{text}}</p>" })
react
var text = "Hello WorldD"; ReactDOM.render( <p>{text}</p> ,document.getElementById("demo"))
其实就是类似jQ的字符串拼接,然后再把拼接好的完整的html结构插入到对应的节点,我们就不会再对html结构实现增删查改,以后要重新操作DOM,只要重新修改新的html结构再插入即可
angular 注意使用之前一定要注入$http服务,只有angular才有服务的概念,服务其实就是封装好一大堆可服用的方法,jQ来扩展react和vue的功能
$http({ url:"test.json", methods:"GET", params:{ name:"test" } }).then(function(data){ console.log(data) })
vue 实现ajax,要不写原生ajax,要不引入jQ,vue-resource,this.$http().then
getData:function(){ $.ajax({ type:"get", url:"test.json", async:true, data:{ skill:"PS" }, success:function(data){ console.log(data) }.bind(this) }); }
react 需要引入jQ,也可以用原生,也可以用第三方库
var getData = function(){ console.log("H") $.ajax({ url:"test.json", type:"GET", success:function(data){ console.log(data) } }) }
angular 双向数据绑定,$scope的属性值绑定对应的值,然后通过ng-bind或者{{}}实现渲染
//HTML VIEW <p>{{text}}</p> //JS MODEL $scope.text = "xxxx"
vue 双向数据绑定,通过在data里面定义属性值,然后通过v-text或者{{}}实现渲染
//HTML VIEW <p>{{text}}</p> //MODEL data:{ text:"Hello World" },
react 单向数据绑定,通过定义一个变量,然后使用{}进行绑定
//JS MODEL var text = "Hello WorldD"; //HTML VIEW <p>{text}</p>
angular 通过在$scope里面定义一个函数,然后通过指令(ng-click)绑定到对应的标签上
//HTML <button ng-click="getData">GET</button> //MODEL $scope.getData = function() {}
vue 通过在methods里面定义方法,然后通过指令(@click)绑定到对应的标签上 @click === v-on:click
<button @Click="getData">Get</button> methods:{ getData:function(){} }
react 定义函数,配合{}来绑定,jsx=>{}左右是没有双引号
//定义一个函数 var getData = function(){} // <button onClick={getData}>Ok</button> <button onClick={function(){}}>Ok</button>
其实就是把相同类型的DOM操作封装在一起,然后实现复用 angular
<ng-color>组件</ng-color> <div ng-color="">指令</div>
//使用 <p ng-color="blue">{{text}}</p> //定义指令 app.directive("ngColor",function(){ return { link:function(scope,ele,attr){ ele.css("color",attr.ngColor) } } })
vue 全局和局部的directive有单数复数的区分
Vue.directive()//全局定义 directives:{//局部定义 color:{ bind:function(){ this.vm//scope this.el.style.color = "red"//ele } } }
react 没有指令,要自己去实现DOM的复用就要封装类指令来实现
angular ng-show ng-if
<ul> <li ng-repeat="a in arr">{{a}}</li> </ul>
<ul> <li v-for="a in arr">{{a}}</li> </ul>
{arr.map(function(item){ return <li>{item}</li> })}
angular 过滤器其实是一种特殊的服务,封装一个处理相同类型数据的方法,使用的时候用管道字符+过滤器名字
//HTML <div ng-bind-html="html|html"> //JS app.filter("html",function($sce){ return function(input){ console.log(input) return $sce.trustAsHtml(input) } })
<p>{{text|ed}}</p> Vue.filter("过滤器的名字",function(){}) filters:{//局部定义 ed:function(input){ return input+"ed"; } }
react 实现一个类过滤器的方法
var ed = function(input){ return input+"ed" } <p>{ed(text)}</p>
老Y,有小bug, Angular的设计模式是 MVC与MVVM , MVVM与MVP 的唯一区别是MVVM是双向数据绑定 -----阮一峰
React Vue Angular
初始化
angular
vue
react
MVVM MVC MVP
虚拟DOM
其实就是类似jQ的字符串拼接,然后再把拼接好的完整的html结构插入到对应的节点,我们就不会再对html结构实现增删查改,以后要重新操作DOM,只要重新修改新的html结构再插入即可
Ajax
angular 注意使用之前一定要注入$http服务,只有angular才有服务的概念,服务其实就是封装好一大堆可服用的方法,jQ来扩展react和vue的功能
vue 实现ajax,要不写原生ajax,要不引入jQ,vue-resource,this.$http().then
react 需要引入jQ,也可以用原生,也可以用第三方库
绑定数据
angular 双向数据绑定,$scope的属性值绑定对应的值,然后通过ng-bind或者{{}}实现渲染
vue 双向数据绑定,通过在data里面定义属性值,然后通过v-text或者{{}}实现渲染
react 单向数据绑定,通过定义一个变量,然后使用{}进行绑定
绑定函数
angular 通过在$scope里面定义一个函数,然后通过指令(ng-click)绑定到对应的标签上
vue 通过在methods里面定义方法,然后通过指令(@click)绑定到对应的标签上 @click === v-on:click
react 定义函数,配合{}来绑定,jsx=>{}左右是没有双引号
自定义指令
其实就是把相同类型的DOM操作封装在一起,然后实现复用 angular
vue 全局和局部的directive有单数复数的区分
react 没有指令,要自己去实现DOM的复用就要封装类指令来实现
内置指令(遍历数组)
angular ng-show ng-if
vue
react
过滤器
angular 过滤器其实是一种特殊的服务,封装一个处理相同类型数据的方法,使用的时候用管道字符+过滤器名字
vue
react 实现一个类过滤器的方法