前言:

前端主流框架有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文件

<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
</head>

步骤2 创建HTML标签

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

参数介绍:

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

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

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

二、Vue指令介绍

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

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

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
</head> <body>
<div id="app">
<div v-html="ele1"></div> <!--渲染标签变量 -->
<b></b>
</div>
</body>
<script>
new Vue({
el:'#app',
data:{
ele1:'<a href="http://www.baidu.com">跳转</a>'
}
})
</script>
</html>

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

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
</head> <body>
<div id="app">
<div v-text="temp"></div> <!--渲染文本字符串 -->
<b></b>
</div>
</body>
<script>
new Vue({
el:'#app',
data:{
temp:'你好!'
}
})
</script>
</html>

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

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<script src="vue.js"></script>
<body>
<div id="app">
<div v-show="ok">我是青年</div> <!-- 根据布尔值 显示或者隐藏渲染效果-->
<div v-show="ok1">我是坏人</div>
</div>
</body>
<script>
new Vue({
el: '#app',
data:{
ok:true,
ok1:false
}
})
</script>
</html>

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

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<p>{{temp1?666:444 }}</p> <!--Vue支持三元表达式的形式做变量渲染 -->
<p v-if="yes">yes</p> <!--Vue的变量渲染支持 if 和else判断 -->
<p v-else>flase</p>
</div>
</body>
<script>
new Vue({
el:'#app',
data:{
yes:true
}
} )
</script>
</html>

 

 5、v-for 遍历

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<ul>
<li v-for="(item,index) in arr">
下标:{{index}} <!-- 遍历Vue对象中声明的变量,第2个值为 item -->
数值:{{item}} <!-- 遍历Vue对象中声明的变量,第1个值为 index -->
</li>
</ul>
<ul>
<li v-for="(value,key) in obj">
{{value}} <!--遍历字典 第1个值为 字典的值和 Python正好相反 -->
{{key}} <!--遍历字典 第2个值为 字典的键和 Python正好相反 -->
</li>
</ul> <ul> <!--Vue 遍历嵌套类型数据 -->
<li v-for="item in obj2"> <!-- 注意不要加括号() -->
{{item.name}} <!--对象的name-->
{{item.sex}}
{{item.age}}
</li>
</ul>
</div>
</body>
<script>
new Vue({
el: '#app',
data: {
arr: [11, 22, 33, 44, 55, 66],
obj: {name: '小三', sex: '女', age: 18},
obj2: [{name: '小三', sex: '女', age: 18}, {name: '小四', sex: '女', age: 28}],
}
})
</script>
</html>

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

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<!---v-bind 操作标签的属性 -->
<a v-bind:href='url' v-bind:class='cla' v-text="text" style="text-decoration: none"></a>
</div>
</body>
<script>
vm= new Vue({
el:'#app',
data:{
url:"http://www.baidu.com",
cla:'person',
text:'百度一下',
}
})
setTimeout(function () { //setTimeout 设置2秒钟后修改 Vuel对象中的变量
vm.url='http://www.le.com' //如果修改了 Vuel对象中声明的变量,页面中的效果也会动态改变
vm.text='乐视一下'
},2000)
</script>
</html>

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

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<input type="button" value="点我有饭吃" v-on:click="showme(args)"> <!-- v-on:click绑定事件,支持传入参数--> <input type="button" value="点我有饭吃" @click="showme(args)"> <!-- @:click绑定事件,也支持传入参数-->
</div>
</body>
<script> new Vue({
el:'#app',
data:{
args:'不吃'
},
methods:{showme:function (a) {
alert(a)
} }
})
</script>
</html>

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

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

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

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

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

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

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<p>{{temp1?666:444 }}</p> <!--Vue支持三元表达式的形式做变量渲染 -->
</div>
</body>
<script>
new Vue({
el:'#app',
data:{
temp1:true
}
} )
</script>
</html>

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

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<p>{{temp1}}</p>
<b>{{temp2}}</b>
</div>
</body>
<script>
vm=new Vue({
el:'#app',
data:{
temp1:'大大大大',
temp2:'小小小小' ,
} })
setTimeout(function () { //setTimeout 设置2秒钟后修改 Vuel对象中的变量
vm.temp1='小小小小' //如果修改了 Vuel对象中声明的变量,页面中的效果也会动态改变
vm.temp2='大大大大'
},2000)
</script>
</html>

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

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<script src="vue.js"></script>
<body>
<div id="app">
<p>{{temp1}}</p>
<p>{{temp1}}</p>
<p v-text='temp0+temp1'></p> <!--Vue支持数字运算 -->
</div>
</body>
<script>
new Vue({
el: '#app',
data:{
temp0:100,
temp1:1
}
})
</script>
</html>

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

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

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

  methods: {
showme: function () {
var url = "./static/hotcity.json";
var self = this;
axios.get(url).then(function(respose){
self.arr = respose.data.data.hotCity; })
}
}

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

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

1、 axios.get()

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
<script src="axios.js"></script>
</head>
<body>
<div id="app">
<input type="button" value="点我" v-on:click="showlist">
<ul>
<li v-for="item in lists">
{{item.cityCode}}
{{item.cityName}}
</li>
</ul> </div>
</body>
<script> new Vue({
el:'#app',
data:{
lists:[]
},
methods:{showlist:function () {
url='./hotcity.json';
var self = this; // 由于Vue对象,是类实例化的,所以this是局部对象不是windows对象,赋值给self;
axios.get(url)
.then(function (res) {
self.lists=res.data.data.hotCity //self 现在是 showlist函数中的局部this; }).catch(function (error) { })
} }
}) </script>
</html>

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

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
<script src="axios.js"></script>
</head>
<body>
<div id="app">
<input type="button" value="点我" v-on:click="showlist">
<ul>
<li v-for="item in lists">
{{item.cityCode}}
{{item.cityName}}
</li>
</ul> </div>
</body>
<script> new Vue({
el:'#app',
data:{
lists:[]
},
methods:{showlist:function () {
url='./hotcity.json';
var self = this; // 把new创建的Vue对象this, 赋值给self变量,在回调函数中才能通过sel变量获取 Vue对象中声明的变量;
axios.get(url,{params:{username:'刘德华'} }) //params:{}指get请求携带的参数
.then(function (res) {
self.lists=res.data.data.hotCity //self 现在是 showlist函数中的局部this; }).catch(function (error) { })
} }
}) </script>
</html>

2、 axios.post()

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="axios.js"></script>
<script src="vue.js"></script>
</head>
<body>
<div id="myapp">
<p>姓名:<input type="text" v-model="username"></p>
<p>密码:<input type="password" v-model="pwd"></p>
<p><input type="button" value="登录" v-on:click="login" ></p>
</div>
</body>
<script>
a= new Vue({
el: '#myapp',
data: {
username: '',
pwd: ''
},
methods: {
login: function () {
var url='http://127.0.0.1:8000/api/'
axios.post(url,
{
name: this.username,
password: this.pwd
},
{
'headers':{'Content-Type': 'application/x-www-form-urlencoded'}
}).then(function (res) {
alert(res)
}).catch(function (error) { }) }
}
}) </script>
</html>

Django后端接收

from django.shortcuts import render,HttpResponse
import json
def api1(request):
print(request.method)
if request.method=='POST':
obj = HttpResponse('ok')
obj['Access-Control-Allow-Origin'] = "*"
print(request.POST)
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里面;

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>myproject</title>
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>

5、package.json

批量安装插件

小结:

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

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

<template>
<div>
刘娟
</div>
</template> <!--
export default: 对外开放1个接口,在组件中export 导出了,才能在router目录的index.js文件里 导入!
name : 组件名称
data () :函数(对于组件来说 data 必须是函数)
methods :写其他函数 --> <script>
export default {
name: 'liujuan',
data () {
return {
msg: '我相信你是好的朋友'
}
}
}
</script> <style scoped>
</style>

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

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
// 导入components目录下的 zhanggen组件
import zhanggen from '@/components/zhanggen.vue'
// 为新创建的组件设置URL
Vue.use(Router)
export default new Router({
routes: [
{
path: '/',
name: 'zhanggen',
component: HelloWorld
},
{
path: '/zhanggen/',
name: 'SSD',
component: zhanggen
}
]
})

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

<!--App.vue是1个根组件,所有的组件都要通过根组件配置 路由和组件关系
它包含三部分
template(写html代码)
script(写js代码)
css(写css代码) --> <!-- <router-view/>用来建立 组件和之间的路由关系 --> <template>
<div id="app">
欢迎来到老男孩
<router-link to="/">你</router-link>
<router-link to="/zhanggen/">好</router-link>
<router-view/>
</div>
</template>
<!--javescript代码 -->
<script>
export default {
name: 'app'
}
</script> <!--css代码 --> <style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>

通过package.json批量安装插件

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

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

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

4、使用

在src目录下main.js中

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

在组件里引入

<script>
import axios from 'axios'
</script>

在组件里使用

<script>
import axios from 'axios' //引入安装好的axios插件
</script>
<script>
import axios from 'axios' //引入安装好的axios插件
export default {
name: 'HelloWorld',
data () {
return {
msg: '我相信你是好的朋友',
arr:[],
}
},
mounted: function () { // mounted自动加载showme 函数
this.showme()
},
methods: {
showme: function () {
var url = "./static/hotcity.json" ;
var self = this ;
axios.get(url).then(function(respose) {
self.arr = respose.data.data.hotCity; })
}
}
}
</script>
<template>
<div>
this is a div elements.
<ul>
<li v-for="item in arr">
姓名:{{item.name }}
年龄:{{item.age}}
性别:{{item.sex}}
</li>
</ul>
<div>
<p>姓名:<input type="text" v-model="username"> </p>
<p>年龄:<input type="text" v-model="age"> </p>
<p>性别:<input type="text" v-model="sex"> </p>
<input type="button" value="添加" v-on:click="add">
</div>
</div>
</template> <!--
export default: 对外开放1个接口
name : 组件名称
data () :函数(对于组件来说 data 必须是函数)
methods :写其他函数 --> <script>
export default {
name: 'zhenggen',
data () {
return {
msg: '我相信你是好的朋友',
arr: [],
username:'',
age:'',
sex:'' }
},
mounted: function () {
this.showlist()
},
methods: {
showlist(){ //定义函数 showlist(){}
this.arr=[
{name:"日天",age:"18",sex:'femele'},
{name:"日地",age:"12",sex:'femele'},
{name:"日空气",age:"14",sex:'femele'},
]
},
add(){ //arr.push({}) 添加元素
this.arr.push({name:this.username,age:this.age,sex:this.sex } )
}
}
}
</script> <style scoped>
ul li{
list-style-type:none;
}
</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

<template>
<div id="app">
欢迎来到老男孩
<router-link to="/">首页</router-link>
<router-link to="/zhanggen/">课程</router-link>
<router-link to="/liujuan/">Luffy学位</router-link>
<router-view/>
</div>
</template> 注释:
1、<router-link to="路由中的path">首页</router-link>,最终会生成1个a标签,用户点击那个a标签; 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关键字代指 类的对象;

<script>
//1、js 函数中的 this代指Window全局对象
function zhanggen() {
alert(this)
}
zhanggen() //2、js 类中的 this代指 类的对象
function Foo() {
this.name='egon'
}
obj= new Foo()
alert(obj.name) </script>

2、进阶认识

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

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

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

<script>
userinfo={
name:'alex',
age:18,
show:function () { //userinfo 是1个字典对象
// alert(this.age) //this是userinfo对象
var that = this;
(function () {
console.log(this) //window对象
console.log(that) // that 还是userinfo对象
})()
}
}
userinfo.show()
//如果函数 被对象.函数执行,那么函数中的this代指该对象本身
//如果在自执行函数中 this代指 window 对象;
//this可以被赋值,由于this 被赋值为 that,那么即使在自执行函数中也是 userinfo对象
</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. data:image/png;base64 上传图像将图片转换成base64格式

    大家可能注意到了,网页上有些图片的src或css背景图片的url后面跟了一大串字符,比如: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJ ...

  2. QT移植无法启动 This application failed to start because it could not find or load the QT platform

    QT配置好在自己机器上可以运行,但在别人机器上一直弹出 "This application failed to start because it could not find or load ...

  3. 简单实现RN调用原生方法(IOS)

    在React Native中,一个“原生模块”就是一个实现了“RCTBridgeModule”协议的Objective-C类(个人理解RCTBridgeModule就是react与native之间的桥 ...

  4. 关于在mac安装安卓的模拟器的一些些那点事情~~~

    ook~~自己捣鼓了三天终于安装成功了~妹的~踩了太多的坑~整个人就不好了~ 为了节省大家的时间~所以今天我就将我安装的过程整体思路教给大家!有了思路安装起来就很好了!!!但是 注意的是,也许你会出现 ...

  5. matplotlib.transforms

    来自:龙哥盟飞龙 变换教程 像任何图形包一样,matplotlib建立在变换框架之上,以便在坐标系,用户数据坐标系,轴域者坐标系,图形坐标系和显示坐标系之间轻易变换.在95%的绘图中,你不需要考虑这一 ...

  6. synchronized中判断条件用while而不是if

    假设一个生产者生产一个产品,两个消费者A,B去取这个商品. 使用if: A去取商品,发现空,于是等待... B去取商品,发现空,于是等待... 生产者生产商品,唤醒他们 B先争到锁,从wait()后执 ...

  7. QT---事件系统

    1         QT事件系统 1.1  事件的定义 QT中事件是有专门的类QEvent,常见的有键盘事件QKeyEvent.鼠标事件QMouseEvent和定时器事件QTimerEvent.例如用 ...

  8. 小程序for循环给里面单独的view加单独的样式

    效果图如下: 上面是个列表从数据库拿下来所有的信息:在视图层直接一个for循环展示下来,现在麻烦来了前三个和后面的额不一样,小程序不允许dom操作,那怎么解决呢? 解决办法: wx:for和wx:if ...

  9. web component的理解

    https://www.zhihu.com/question/58731753 https://www.zhihu.com/question/39328603 http://www.cnblogs.c ...

  10. ie67的冷知识

    1. _display:inline;是什么意思 只有ie6认识带下划线的,一般这种写法是用来消除ie6对margin双倍的bug的,比如你写margin-left:10px;那么ie6下显示的是20 ...