由于我自己实话说也算不上所谓的这方面技术大牛(但我会坚持朝这个方向靠拢),所以本篇文档并不会给你介绍三种框架的内部实现和底层原理!本文档只会从他们之间的共同点、思想上来说明一下他们之间的区别,从而告诉你在分别学习这个三个框架的时候有的放矢!

注:文档都是建立在我自己在开放过程中一些实际操作上,所以跟你自己实现上有点区别,请知悉!

首先说下三个框架都有组件的概念,首先说一下组件到底是个什么东西,以及在三个框架中怎么去理解他们!按我自己的理解,组件就是一个个独立的单元,里面封装了一些特定的功能,这样一些组件可是实现复用!形象地作一个比喻:如何把一个人看作一个整体,那么你可以理解成这个人是由眼睛、鼻子、嘴巴以及穿衣等等构成的,这些每个独立的功能单元你就可以把它理解成组件,更有甚者,一个html文件,每个标签也可以看作一个组件,由这些组件构成了我们的html文档。好,我们来分别看看三个框架是怎么封装一个组件的!

  • angular1:严格来说,angular是没有组件这样一个概念的,但是它可以通过指令去封装一些特定功能的单元,从而实现类似其它框架的组件功能。如:
  1. .directive('customComponent',function(){
  2. return {
  3. restrict:'EA',
  4. template:'<div></div>i am directive,i can encapsulate some features</div>',
  5. scope:{}
  6. };
  7. });
  • vue:vue是有组件的概念的,vue的组件概念其实跟angular的指令差不多,只不过更形象的一点。有两种方法可以实现组件:
  1. <div id="app"></div>
  • react:在react中,最核心的就是组件概念了,因为react的思想就是专注于ui层,通过构建组件,来构成我们的用户界面。我们来看一下在react中怎么实现组件。
  1. <div id="app"></div>
  1. function CustomComponent(props){
  2. return (<div>
  3. </div>);
  4. };
  5. ReactDOM.render(
  6. <CustomComponent />,
  7. document.getElementById('app')
  8. );
  • angular:在angular中需要实现数据共享的地方主要是各个控制器彼此之间传输数据了!其实原理就是就是在各个控制器之间通过广播、或者发射事件实现数据的传播。父、子控制器通过broadcast广播事件由父组件向子组件传递数据,通过emit发射事件由子组件向父组件中传递数据。如:
  1. angular.module('myApp',[])
  2. .run(function($rootScope){
  3. $rootScope.$on('hehe',function(e,d){
  4. console.log(d);
  5. });
  6. })
  7. .controller('controller1',function($scope){
  8. $scope.ctrol1 = {};
  9. $scope.ctrol1.msg = 'this is controller1 message';
  10. })
  11. .controller('controller2',function($scope){
  12. $scope.ctrol2 = {};
  13. $scope.$on('boom',function(e,d){
  14. console.log(d);
  15. });
  16. $scope.ctrol2.msg = 'this is controller2 message';
  17. });

当然了,其实我们也可以通过服务来共享数据,如:

  1. <div ng-app="app1">
  2. <div ng-controller="controller1" ng-click="click()">
  3. {{msg}}
  4. </div>
  5. <div ng-controller="controller2" ng-click="click()">
  6. {{msg}} {{getData}}
  7. </div>