前言:

前端主流框架有Vue、react、angular,目前比较火因为Vue比较容易学习,运营起来比较快速;

Vue是什么呢?

是一个基于MVVM架构的,前端框架;

如果你之前已经习惯了用jQuery操作DOM,学习Vue.js时请先抛开手动操作DOM的思维,因为Vue.js是数据驱动的,你无需手动操作DOM。

它通过一些特殊的HTML语法,将DOM和数据绑定起来。一旦你创建了绑定,DOM将和数据保持同步,每当变更了数据,DOM也会相应地更新。

当然了,在使用Vue.js时,你也可以结合其他库一起使用,比如jQuery。

个人理解: HTML标签显示内容和Vue对象中的变量是一致的;

一、简单使用

步骤1 引入Vue.js文件

  1. <head>
  2. <meta charset="UTF-8">
  3. <title>Title</title>
  4. <script src="vue.js"></script>
  5. </head>

步骤2 创建HTML标签

步骤3 实例化Vue对象,并传参设置对象属性;

参数介绍:

  1. el属性:该属性的值必须为 最外层HTML标签的id名称,这样绑定之后就可以在#app标签中也可以应用Vue对象的属性和指令了;
  1. data属性:
  1. dataVue中声明变量(注意只有 data属性中声明的变量在Vue中才可以使用)
  1.  

步骤4、将Vue对象中声明的变量渲染到HTML标签

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <script src="vue.js"></script> <!--1、 引入Vue.js 、-->
  7. </head>
  8. <body>
  9. <div id="app"> <!--2、创建HTML标签-->
  10. <p>{{temp1}}</p> <!-- 6、把Vue中声明的变量渲染到 HTMK标签 -->
  11. <b>{{temp2}}</b>
  12. </div>
  13. </body>
  14. <script>
  15. new Vue({ // 3、实例化1个实例化 Vue对象
  16. el:'#app', // 传入1个为el的属性(注意:1、该属性的值必须为 最外层HTML标签的 id名称,这样绑定之后就可以在#app标签中应用Vue的属性和指令了)
  17. data:{ // 5、传入2个为data的属性,该属性保存Vue的变量
  18. temp1:'Hello world !', // 6、在data中Vue中声明变量(注意只有 data属性中声明的变量在Vue中才可以使用)
  19. temp2:'Hel lo girl !'
  20. }
  21. })
  22. </script>
  23. </html>

二、Vue指令介绍

除了通过{{变量名}},把Vue对象声明的变量渲染到HTML中之外,还可以通过指令的方式对DOC元素(HTML标签)赋值,或其他操作;

1、v-html="variable" 渲染标签变量

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <script src="vue.js"></script>
  7. </head>
  8.  
  9. <body>
  10. <div id="app">
  11. <div v-html="ele1"></div> <!--渲染标签变量 -->
  12. <b></b>
  13. </div>
  14. </body>
  15. <script>
  16. new Vue({
  17. el:'#app',
  18. data:{
  19. ele1:'<a href="http://www.baidu.com">跳转</a>'
  20. }
  21. })
  22. </script>
  23. </html>

2、v-text='variable ' 渲染文本字符串变量

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <script src="vue.js"></script>
  7. </head>
  8.  
  9. <body>
  10. <div id="app">
  11. <div v-text="temp"></div> <!--渲染文本字符串 -->
  12. <b></b>
  13. </div>
  14. </body>
  15. <script>
  16. new Vue({
  17. el:'#app',
  18. data:{
  19. temp:'你好!'
  20. }
  21. })
  22. </script>
  23. </html>

3、v-show 显示和隐藏(通过display来控制显示与隐藏,真实标签不会被删除)

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <script src="vue.js"></script>
  8. <body>
  9. <div id="app">
  10. <div v-show="ok">我是青年</div> <!-- 根据布尔值 显示或者隐藏渲染效果-->
  11. <div v-show="ok1">我是坏人</div>
  12. </div>
  13. </body>
  14. <script>
  15. new Vue({
  16. el: '#app',
  17. data:{
  18. ok:true,
  19. ok1:false
  20. }
  21. })
  22. </script>
  23. </html>

 4、v-if/else 通过判断语句控制显示与隐藏 (和v-show的区别,标签会被插入、删除

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <script src="vue.js"></script>
  7. </head>
  8. <body>
  9. <div id="app">
  10. <p>{{temp1?666:444 }}</p> <!--Vue支持三元表达式的形式做变量渲染 -->
  11. <p v-if="yes">yes</p> <!--Vue的变量渲染支持 if 和else判断 -->
  12. <p v-else>flase</p>
  13. </div>
  14. </body>
  15. <script>
  16. new Vue({
  17. el:'#app',
  18. data:{
  19. yes:true
  20. }
  21. } )
  22. </script>
  23. </html>

 

 5、v-for 遍历

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <script src="vue.js"></script>
  7. </head>
  8. <body>
  9. <div id="app">
  10. <ul>
  11. <li v-for="(item,index) in arr">
  12. 下标:{{index}} <!-- 遍历Vue对象中声明的变量,第2个值为 item -->
  13. 数值:{{item}} <!-- 遍历Vue对象中声明的变量,第1个值为 index -->
  14. </li>
  15. </ul>
  16. <ul>
  17. <li v-for="(value,key) in obj">
  18. {{value}} <!--遍历字典 第1个值为 字典的值和 Python正好相反 -->
  19. {{key}} <!--遍历字典 第2个值为 字典的键和 Python正好相反 -->
  20. </li>
  21. </ul>
  22.  
  23. <ul> <!--Vue 遍历嵌套类型数据 -->
  24. <li v-for="item in obj2"> <!-- 注意不要加括号() -->
  25. {{item.name}} <!--对象的name-->
  26. {{item.sex}}
  27. {{item.age}}
  28. </li>
  29. </ul>
  30. </div>
  31. </body>
  32. <script>
  33. new Vue({
  34. el: '#app',
  35. data: {
  36. arr: [11, 22, 33, 44, 55, 66],
  37. obj: {name: '小三', sex: '女', age: 18},
  38. obj2: [{name: '小三', sex: '女', age: 18}, {name: '小四', sex: '女', age: 28}],
  39. }
  40. })
  41. </script>
  42. </html>

 6、v-bind:标签属性=‘ 变量’  Vue动态操作标签的属性

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <script src="vue.js"></script>
  7. </head>
  8. <body>
  9. <div id="app">
  10. <!---v-bind 操作标签的属性 -->
  11. <a v-bind:href='url' v-bind:class='cla' v-text="text" style="text-decoration: none"></a>
  12. </div>
  13. </body>
  14. <script>
  15. vm= new Vue({
  16. el:'#app',
  17. data:{
  18. url:"http://www.baidu.com",
  19. cla:'person',
  20. text:'百度一下',
  21. }
  22. })
  23. setTimeout(function () { //setTimeout 设置2秒钟后修改 Vuel对象中的变量
  24. vm.url='http://www.le.com' //如果修改了 Vuel对象中声明的变量,页面中的效果也会动态改变
  25. vm.text='乐视一下'
  26. },2000)
  27. </script>
  28. </html>

 7、v-on:click="事件(args)="事件(args)"Vue为标签绑定事件   

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <script src="vue.js"></script>
  7. </head>
  8. <body>
  9. <div id="app">
  10. <input type="button" value="点我有饭吃" v-on:click="showme(args)"> <!-- v-on:click绑定事件,支持传入参数-->
  11.  
  12. <input type="button" value="点我有饭吃" @click="showme(args)"> <!-- @:click绑定事件,也支持传入参数-->
  13. </div>
  14. </body>
  15. <script>
  16.  
  17. new Vue({
  18. el:'#app',
  19. data:{
  20. args:'不吃'
  21. },
  22. methods:{showme:function (a) {
  23. alert(a)
  24. } }
  25. })
  26. </script>
  27. </html>

8、v-model数据双向绑定(所见即所得)

我们在前端页面form 标签就是为了向后台提交数据,有了v-model 再也不用寻找到input标签再去获取val值了,

如果我们接收到了后台的数据,赋值给Vue变量,页面标签显示的内容也更新了,这就是v-model双向绑定的优势所在;

把视图(HTML标签显示内容)和model数据(Vue中声明的变量)进行双向绑定,通过视图可以改变数据,通过数据也可以改变视图;

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <script src="vue.js"></script>
  7. </head>
  8. <body>
  9. <div id="myapp">
  10. <input type="text" v-model="showtemp">
  11. <p>{{showtemp}}</p>
  12. <p>{{showtemp}}</p>
  13. <input type="button" v-on:click="showme" value="点击我"> <!--显示层数据和model层数据一致,输入的内容改变变量自动改变;-->
  14.  
  15. <select v-model="sel"> <!--select选中那个option,sel变量被赋值为那个option的value -->
  16. <option value="1" selected>111</option>
  17. <option value="2">222</option>
  18. <option value="3">333</option>
  19. </select>
  20. </div>
  21. </body>
  22. <script>
  23. new Vue({
  24. el:'#myapp',
  25. data:{
  26. showtemp:'', // model层数据和显示层数据一致,input标签输入的内容改变 showtemp变量内容改变;
  27. sel:'1'
  28. },
  29. methods:{showme:function () {
  30. alert(this.sel)
  31. }}
  32. })
  33. </script>
  34. </html>
  35.  
  36. <!--MVVM框架的优势 -->
  37. <!--Vue中很大的一个特性,数据的双向绑定
  38. 优势1:我们在前端页面form 标签就是为了向后台提交数据,有了v-model 再也不用寻找到input标签再去获取val值了
  39. 优势2:如果我们把后台的数据,赋值给Vue变量,页面标签显示的内容也更新了,v-model双向绑定的优势! -->

9、Vue三元表达式的形式做变量渲染

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <script src="vue.js"></script>
  7. </head>
  8. <body>
  9. <div id="app">
  10. <p>{{temp1?666:444 }}</p> <!--Vue支持三元表达式的形式做变量渲染 -->
  11. </div>
  12. </body>
  13. <script>
  14. new Vue({
  15. el:'#app',
  16. data:{
  17. temp1:true
  18. }
  19. } )
  20. </script>
  21. </html>

10、修改Vue data属性中的变量(页面效果动态改变)

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <script src="vue.js"></script>
  7. </head>
  8. <body>
  9. <div id="app">
  10. <p>{{temp1}}</p>
  11. <b>{{temp2}}</b>
  12. </div>
  13. </body>
  14. <script>
  15. vm=new Vue({
  16. el:'#app',
  17. data:{
  18. temp1:'大大大大',
  19. temp2:'小小小小' ,
  20. }
  21.  
  22. })
  23. setTimeout(function () { //setTimeout 设置2秒钟后修改 Vuel对象中的变量
  24. vm.temp1='小小小小' //如果修改了 Vuel对象中声明的变量,页面中的效果也会动态改变
  25. vm.temp2='大大大大'
  26. },2000)
  27. </script>
  28. </html>

11、Vue中变量支持数值运算

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <script src="vue.js"></script>
  8. <body>
  9. <div id="app">
  10. <p>{{temp1}}</p>
  11. <p>{{temp1}}</p>
  12. <p v-text='temp0+temp1'></p> <!--Vue支持数字运算 -->
  13. </div>
  14. </body>
  15. <script>
  16. new Vue({
  17. el: '#app',
  18. data:{
  19. temp0:100,
  20. temp1:1
  21. }
  22. })
  23. </script>
  24. </html>

12、 mounted(存放 所有html加载完毕之后,立即自动执行的事件)

  1. mounted:function () { // mounted自动加载showme 函数
  2. this.showme()
  3. },

13、methods(存放 事件触发后执行的函数)

  1. methods: {
  2. showme: function () {
  3. var url = "./static/hotcity.json";
  4. var self = this;
  5. axios.get(url).then(function(respose){
  6. self.arr = respose.data.data.hotCity;
  7.  
  8. })
  9. }
  10. }

三、Vue前后端数据交互(Axios)

无论使用什么前端框架和后端进行交换是不可避免的,例如jQuery使用ajax,Vue也有和后端交换的方法Axios;

1、 axios.get()

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <script src="vue.js"></script>
  7. <script src="axios.js"></script>
  8. </head>
  9. <body>
  10. <div id="app">
  11. <input type="button" value="点我" v-on:click="showlist">
  12. <ul>
  13. <li v-for="item in lists">
  14. {{item.cityCode}}
  15. {{item.cityName}}
  16. </li>
  17. </ul>
  18.  
  19. </div>
  20. </body>
  21. <script>
  22.  
  23. new Vue({
  24. el:'#app',
  25. data:{
  26. lists:[]
  27. },
  28. methods:{showlist:function () {
  29. url='./hotcity.json';
  30. var self = this; // 由于Vue对象,是类实例化的,所以this是局部对象不是windows对象,赋值给self;
  31. axios.get(url)
  32. .then(function (res) {
  33. self.lists=res.data.data.hotCity //self 现在是 showlist函数中的局部this;
  34.  
  35. }).catch(function (error) {
  36.  
  37. })
  38. } }
  39. })
  40.  
  41. </script>
  42. </html>

axios.get(url,{params:{username:'zhanggen'} })带参数的get请求

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <script src="vue.js"></script>
  7. <script src="axios.js"></script>
  8. </head>
  9. <body>
  10. <div id="app">
  11. <input type="button" value="点我" v-on:click="showlist">
  12. <ul>
  13. <li v-for="item in lists">
  14. {{item.cityCode}}
  15. {{item.cityName}}
  16. </li>
  17. </ul>
  18.  
  19. </div>
  20. </body>
  21. <script>
  22.  
  23. new Vue({
  24. el:'#app',
  25. data:{
  26. lists:[]
  27. },
  28. methods:{showlist:function () {
  29. url='./hotcity.json';
  30. var self = this; // 把new创建的Vue对象this, 赋值给self变量,在回调函数中才能通过sel变量获取 Vue对象中声明的变量;
  31. axios.get(url,{params:{username:'刘德华'} }) //params:{}指get请求携带的参数
  32. .then(function (res) {
  33. self.lists=res.data.data.hotCity //self 现在是 showlist函数中的局部this;
  34.  
  35. }).catch(function (error) {
  36.  
  37. })
  38. } }
  39. })
  40.  
  41. </script>
  42. </html>

2、 axios.post()

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <script src="axios.js"></script>
  7. <script src="vue.js"></script>
  8. </head>
  9. <body>
  10. <div id="myapp">
  11. <p>姓名:<input type="text" v-model="username"></p>
  12. <p>密码:<input type="password" v-model="pwd"></p>
  13. <p><input type="button" value="登录" v-on:click="login" ></p>
  14. </div>
  15. </body>
  16. <script>
  17. a= new Vue({
  18. el: '#myapp',
  19. data: {
  20. username: '',
  21. pwd: ''
  22. },
  23. methods: {
  24. login: function () {
  25. var url='http://127.0.0.1:8000/api/'
  26. axios.post(url,
  27. {
  28. name: this.username,
  29. password: this.pwd
  30. },
  31. {
  32. 'headers':{'Content-Type': 'application/x-www-form-urlencoded'}
  33. }).then(function (res) {
  34. alert(res)
  35. }).catch(function (error) {
  36.  
  37. })
  38.  
  39. }
  40. }
  41. })
  42.  
  43. </script>
  44. </html>

Django后端接收

  1. from django.shortcuts import render,HttpResponse
  2. import json
  3. def api1(request):
  4. print(request.method)
  5. if request.method=='POST':
  6. obj = HttpResponse('ok')
  7. obj['Access-Control-Allow-Origin'] = "*"
  8. print(request.POST)
  9. return obj

四、Vue的运行平台  node.js

1、node.js介绍

Node.js 可以用JavaScript写一个服务端的服务器,是一个基于 Chrome V8 引擎的 JavaScript 后端运行环境,Vue框架也是基于Node.js运行的;

Node.js 的包管理器 npm(类似于linux的yum),是全球最大的开源库生态系统。

类似于

Python可以用Django创建服务端给别人提供数据、php可以在Apache创建服务端、Java可以使用Tomcat构建服务端一样;

官网:http://nodejs.cn/

Node.js的应用场景:

由于Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,适用于开发聊天工具 、电子商务等高并发app;

银角补充:websock 是http协议的弟弟,都是基于TCP协议,不同于http协议的是websock使用的长连接,并且连接需要经过握手+验证;如果想要装逼(Magic strings)

2、安装node.js平台并创建Vue项目

2.1 登录官网:

http://nodejs.cn/download/

2.2 选择适配操作系统:

2.3 检查是否安装成功:node -v

2.4 通过脚手架创建Vue项目

全局安装脚手架:npm install vue-cli -g

创建基于webpack模板的项目: D:   vue init webpack myproject

进入项目安装依赖包:cd myproject  npm install  (该环节会比较慢)

2.5 启动项目:npm run dev 或 npm start ( 以上环节可能会报错,以项目启动成功为最终目的)

四、基于node.js平台开发Vue项目

Vue非常火的原因是可以快速开发单页面应用( 1个网站只有1个页面,通过点击这个页面的菜单加载 1个组件)

项目 目录结构介绍

1、node_models目录

存放npm下载的插件

2、src目录

项目开发目录(开发项目关注的目录)

assets目录

  存放静态图片

components目录

  存放网页组件,在此目录下创建新组件

router目录

  index.js (为组件 设置访问路径)

  

app.vue (根组件  所有组件的入口)

  所有组件的根组件,为所有组件设置路由 和组件关系,把所有组件整合渲染到首页;

main.js

  核心文件,和项目最外层index.html默认首页是组合关系,为默认首页创建Vue对象(只能创建1个Vue对象);

4、index.html

项目最外层index.html作为1个div标签,把根组件 和所有组件中所有内容 放在index里面;

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1.0">
  6. <title>myproject</title>
  7. </head>
  8. <body>
  9. <div id="app"></div>
  10. <!-- built files will be auto injected -->
  11. </body>
  12. </html>

5、package.json

批量安装插件

小结:

基于node.js使用Vue创建单页面应用思路:

1、在components目录下创建组件(.vue结尾的文件)

  1. <template>
  2. <div>
  3. 刘娟
  4. </div>
  5. </template>
  6.  
  7. <!--
  8. export default: 对外开放1个接口,在组件中export 导出了,才能在router目录的index.js文件里 导入!
  9. name : 组件名称
  10. data () :函数(对于组件来说 data 必须是函数)
  11. methods :写其他函数
  12.  
  13. -->
  14.  
  15. <script>
  16. export default {
  17. name: 'liujuan',
  18. data () {
  19. return {
  20. msg: '我相信你是好的朋友'
  21. }
  22. }
  23. }
  24. </script>
  25.  
  26. <style scoped>
  27. </style>

2、在router目录下的index.js中导入新组件, 并为组件设置访问url生成路由

  1. import Vue from 'vue'
  2. import Router from 'vue-router'
  3. import HelloWorld from '@/components/HelloWorld'
  4. // 导入components目录下的 zhanggen组件
  5. import zhanggen from '@/components/zhanggen.vue'
  6. // 为新创建的组件设置URL
  7. Vue.use(Router)
  8. export default new Router({
  9. routes: [
  10. {
  11. path: '/',
  12. name: 'zhanggen',
  13. component: HelloWorld
  14. },
  15. {
  16. path: '/zhanggen/',
  17. name: 'SSD',
  18. component: zhanggen
  19. }
  20. ]
  21. })

3、通过根组件 把组件和链接展示到首页(<router-link to="/">你</router-link>)

  1. <!--App.vue是1个根组件,所有的组件都要通过根组件配置 路由和组件关系
  2. 它包含三部分
  3. template(写html代码)
  4. script(写js代码)
  5. css(写css代码) -->
  6.  
  7. <!-- <router-view/>用来建立 组件和之间的路由关系 -->
  8.  
  9. <template>
  10. <div id="app">
  11. 欢迎来到老男孩
  12. <router-link to="/"></router-link>
  13. <router-link to="/zhanggen/"></router-link>
  14. <router-view/>
  15. </div>
  16. </template>
  17. <!--javescript代码 -->
  18. <script>
  19. export default {
  20. name: 'app'
  21. }
  22. </script>
  23.  
  24. <!--css代码 -->
  25.  
  26. <style>
  27. #app {
  28. font-family: 'Avenir', Helvetica, Arial, sans-serif;
  29. -webkit-font-smoothing: antialiased;
  30. -moz-osx-font-smoothing: grayscale;
  31. text-align: center;
  32. color: #2c3e50;
  33. margin-top: 60px;
  34. }
  35. </style>

通过package.json批量安装插件

1、以管理员身份运行cmd cd 项目目录 npm install axios(插件名称)

2、展开node_modules目录,查看安装的插件名称(插件源)

3、在package.json文件引入插件源中的插件名称

4、使用

在src目录下main.js中

  1. import axios from 'axios' // 导入第3方插件
  2. Vue.use(axios) // 使用插件

在组件里引入

  1. <script>
  2. import axios from 'axios'
  3. </script>

在组件里使用

  1. <script>
  2. import axios from 'axios' //引入安装好的axios插件
  3. </script>
  1. <script>
  2. import axios from 'axios' //引入安装好的axios插件
  3. export default {
  4. name: 'HelloWorld',
  5. data () {
  6. return {
  7. msg: '我相信你是好的朋友',
  8. arr:[],
  9. }
  10. },
  11. mounted: function () { // mounted自动加载showme 函数
  12. this.showme()
  13. },
  14. methods: {
  15. showme: function () {
  16. var url = "./static/hotcity.json" ;
  17. var self = this ;
  18. axios.get(url).then(function(respose) {
  19. self.arr = respose.data.data.hotCity;
  20.  
  21. })
  22. }
  23. }
  24. }
  25. </script>
  1. <template>
  2. <div>
  3. this is a div elements.
  4. <ul>
  5. <li v-for="item in arr">
  6. 姓名:{{item.name }}
  7. 年龄:{{item.age}}
  8. 性别:{{item.sex}}
  9. </li>
  10. </ul>
  11. <div>
  12. <p>姓名:<input type="text" v-model="username"> </p>
  13. <p>年龄:<input type="text" v-model="age"> </p>
  14. <p>性别:<input type="text" v-model="sex"> </p>
  15. <input type="button" value="添加" v-on:click="add">
  16. </div>
  17. </div>
  18. </template>
  19.  
  20. <!--
  21. export default: 对外开放1个接口
  22. name : 组件名称
  23. data () :函数(对于组件来说 data 必须是函数)
  24. methods :写其他函数
  25.  
  26. -->
  27.  
  28. <script>
  29. export default {
  30. name: 'zhenggen',
  31. data () {
  32. return {
  33. msg: '我相信你是好的朋友',
  34. arr: [],
  35. username:'',
  36. age:'',
  37. sex:''
  38.  
  39. }
  40. },
  41. mounted: function () {
  42. this.showlist()
  43. },
  44. methods: {
  45. showlist(){ //定义函数 showlist(){}
  46. this.arr=[
  47. {name:"日天",age:"18",sex:'femele'},
  48. {name:"日地",age:"12",sex:'femele'},
  49. {name:"日空气",age:"14",sex:'femele'},
  50. ]
  51. },
  52. add(){ //arr.push({}) 添加元素
  53. this.arr.push({name:this.username,age:this.age,sex:this.sex } )
  54. }
  55. }
  56. }
  57. </script>
  58.  
  59. <style scoped>
  60. ul li{
  61. list-style-type:none;
  62. }
  63. </style>

五、知识总结

1、前后端分离:

经过对Vue的一些学习得知Vue可以通过组件构建单页面应用,并且可以通过路由在当前页做页面的跳转,还可以使用axios插件(ajax)向后获取和提交数据;

那么Django后台return的响应,再也不需要响应redirect和模板渲染了,只需要提供1个API接口(url),给前端、APP 返回json数据即可(1个APi适配多中应用),

这种前后端搭配模式叫做前后端分离;

例如

前端代码运行在node.js平台上,域名 https://www.le.com;(让客户访问)

前端启动起来之后,向后端获取数据 https://api.le.com;(给前端提供数据)

2、Vue项目 

可以把node.js中的Vue项目,分为3层;

1层index.htmm包含所有组件的内容,src目录下的main.js为index.html实例化创建vue对象

2层 根组件app.vue

  1. <template>
  2. <div id="app">
  3. 欢迎来到老男孩
  4. <router-link to="/">首页</router-link>
  5. <router-link to="/zhanggen/">课程</router-link>
  6. <router-link to="/liujuan/">Luffy学位</router-link>
  7. <router-view/>
  8. </div>
  9. </template>
  10.  
  11. 注释:
  12. 1、<router-link to="路由中的path">首页</router-link>,最终会生成1个a标签,用户点击那个a标签;
  13.  
  14. 2、用户点击哪个a标签,就在 <router-view/>中渲染哪个组件;

3层router目录下的index.js承上启下 为各组件生成访问路径,让根组件调用;

4层 components目录下创建 各个组件

3、Vue插件扩展

跟Python的pip 类似,如果在项目开发中需要使用其他插件,使用npm去网络上自动下载,下载成功后后存放在node_modeule站点包目录下,使用import导入;

4、关于JavaScript的this关键字

1.初步认识

js 函数中的 this关键字代指Window全局对象,类中的 this关键字代指 类的对象;

  1. <script>
  2. //1、js 函数中的 this代指Window全局对象
  3. function zhanggen() {
  4. alert(this)
  5. }
  6. zhanggen()
  7.  
  8. //2、js 类中的 this代指 类的对象
  9. function Foo() {
  10. this.name='egon'
  11. }
  12. obj= new Foo()
  13. alert(obj.name)
  14.  
  15. </script>

2、进阶认识

如果函数 被对象.函数执行,那么函数中的this代指该对象本身

如果在自执行函数中 this代指 window 对象;

this可以被赋值,由于this 被赋值为 that,那么即使在自执行函数中也是 userinfo对象

  1. <script>
  2. userinfo={
  3. name:'alex',
  4. age:18,
  5. show:function () { //userinfo 是1个字典对象
  6. // alert(this.age) //this是userinfo对象
  7. var that = this;
  8. (function () {
  9. console.log(this) //window对象
  10. console.log(that) // that 还是userinfo对象
  11. })()
  12. }
  13. }
  14. userinfo.show()
  15. //如果函数 被对象.函数执行,那么函数中的this代指该对象本身
  16. //如果在自执行函数中 this代指 window 对象;
  17. //this可以被赋值,由于this 被赋值为 that,那么即使在自执行函数中也是 userinfo对象
  18. </script>

大刚博客:http://www.cnblogs.com/zhaodagang8/

前端框架之Vue.js的更多相关文章

  1. 一款简单而不失强大的前端框架——【Vue.js的详细入门教程①】

    ↓— Vue.js框架魅力 —↓ 前言       Vue.js 是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.V ...

  2. 后端视角下的前端框架之Vue.js初探

    背景 作为常年搞后端的自己来说,除了多年前学习的一点关于HTML的皮毛,对现在的前端技术栈可谓是一窍不通.但是因为最近在做的内部业务全链路监控系统,负责前端的同事做到一半去搞别的项目了,为了把项目落地 ...

  3. Python-S9-Day99——Web前端框架之Vue.js

    01课程安排 02let和const: 03 箭头函数 04 对象的单体模式 05 Node.js介绍和npm操作 06 Webpack,babel介绍和Vue的第一个案例 01课程安排 1.1 ht ...

  4. 前端框架之vue初步学习

    Vue.js介绍: Vue.js是一个构建数据驱动的web界面的渐进式框架.Vue.js的目标是通过尽可能简单的API实现响应的数据绑定和组合的视图组件.它不仅易于上手,还便于与第三方库或既有项目整合 ...

  5. 前端开发工具vue.js开发实践总结

    最近有很长时间没有更新博客了,换了公司,全部的心思都放在项目上了.通过这次项目的上线,让我感受最深的是前后端分离后,前端页面的模块化管理,以及前端页面的数据邦定.在接触vue.js之前,我之前端要用到 ...

  6. vue.js学习笔记(一):什么是mvvm框架,vue.js的核心思想

    一:MVVM框架 MVVM框架的应用场景:  1.针对具有复杂交互逻辑的前端应用 2.提供基础的架构抽象 3.提供ajax数据持久化,保证前端用户体验 二:vue.js的核心思想 (一):数据驱动 ( ...

  7. Js 框架之Vue .JS学习记录 ① 与Vue 初识

    目录 与 Vue.js 认识 VUE.JS是个啥?有啥好处? Vue 的目标 战前准备  VUE.JS环境 VUE.JS 尝试一下,你就明白 第一步 实例化VUE 对象 第二步VueAPP 调用数据 ...

  8. web前端框架之Vue hello world

    [博客园cnblogs笔者m-yb原创,转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708] http ...

  9. 《前端福音,vue.js 之豆瓣电影组件大揭秘-video》

    {{ message }} 小胡子语法   在 Vue 中被称之为双花括号插值表达式 ---------------- http://todomvc.com/ TodoMVC是一款开源的JavaScr ...

随机推荐

  1. 2019年前端面试题 | CSS篇 (更新于4月15日)

    虽说刷面试题有走捷径之嫌,但我发现,对于我这样没有工作经历的人来说,其实是拓展自己实战技能和加深知识理解的一个好机会. 分享出来,也希望大家不要背完了事,正经的去细细琢磨各种原由. 本篇是一个题目合集 ...

  2. windows下远程连接Mysql

    使用“Ctrl + R”组合键快速打开cmd窗口,并输入“cmd”命令,打开cmd窗口. 使用“mysql -uroot -proot”命令可以连接到本地的mysql服务. 使用“use mysql” ...

  3. Redux基础使用

    Redux基础使用: 简介:这里是从需求来响应的执行操作redux,所以理解起来更加的容易铭记在心的三点:action/reducer/store 除此之外就是react/react native的基 ...

  4. Javascript 垃圾回收机制

    转载于https://www.cnblogs.com/zhwl/p/4664604.html 一.垃圾回收的必要性 由于字符串.对象和数组没有固定大小,所有当他们的大小已知时,才能对他们进行动态的存储 ...

  5. 启动总是提示:Process finished with exit code 0

    1.端口冲突检查端口号 2.缺少web启动依赖 <dependency> <groupId>org.springframework.boot</groupId> & ...

  6. 如何用git把本地代码上传到github

    注册账户以及创建仓库 要想使用github第一步当然是注册github账号了.之后就可以创建仓库了(免费用户只能建公共仓库),Create a New Repository,填好名称后Create,之 ...

  7. 部署NTP服务器进行时间同步

    NTP服务端:linl_S    IP:10.0.0.15 NTP客户端:lin_C    IP:10.0.0.16 NTP服务概述 1.原理 NTP(Network TimeProtocol,网络时 ...

  8. sql server 学习笔记 ( backup 备份方案 )

    做个记入就好 USE [master] SELECT bs.database_name AS 'Database Name', bs.backup_start_date AS 'Backup Star ...

  9. 连续子数组和 Continuous Subarray Sum

    2018-10-03 01:12:42 问题描述: 问题求解: 本题本质上其实是一个preSum问题的变种,每次求preSum % k,并将之保存到map中,如果之后再次得到相同的余数,则表示这两者之 ...

  10. EntityFramework的安装

    关于EntityFramework在vs2012无法引用的问题 这段时间学习MVC,发现一个问题,我公司的电脑可以直接引用EntityFrameWork这个命名空间,但我家里面的电脑就不能直接引用,刚 ...