vue.js基础demo

Vue.js

定义:

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,方便与第三方库或既有项目整合

Vue.js 目标

通过尽可能简单的 API 实现响应的数据绑定和组合的视图组

目录结构

目录/文件

说明

build

项目构建(webpack)相关代码

config

配置目录,包括端口号等。我们初学可以使用默认的。

node_modules

npm 加载的项目依赖模块

src

包含了几个目录及文件:

  •  

assets: 放置一些图片,如logo等。

  •  
  •  

components: 目录里面放了一个组件文件,可以不用。

  •  
  •  

App.vue: 项目入口文件,我们也可以直接将组件写这里,而不使用 components 目录。

  •  
  •  

main.js: 项目的核心文件。

  •  

static

静态资源目录,如图片、字体等。

test

初始测试目录,可删除

.xxxx文件

这些是一些配置文件,包括语法配置,git配置等。

index.html

首页入口文件,你可以添加一些 meta 信息或统计代码啥的。

package.json

项目配置文件。

README.md

项目的说明文档,markdown 格式

参考资料: [4] 

 

 

 

 

Vue.js教程

Demo1:

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>Vue 测试实例 - 菜鸟教程(runoob.com)</title>

<script src="https://unpkg.com/vue/dist/vue.js"></script>

</head>

<body>

<div id="app">

  <p>{{ message }}</p>

</div>

 

<script>

new Vue({

  el: '#app',

  data: {

    message: 'Hello Vue.js!'

  }

})

</script>

</body>

</html>

Vue.js安装

我们可以在 Vue.js 的官网上直接下载 vue.min.js 并用 <script> 标签引入

使用cdn方法

Staticfile CDN(国内) :https://cdn.staticfile.org/vue/2.2.2/vue.min.js

unpkghttps://unpkg.com/vue/dist/vue.js

cdnjs : https://cdnjs.cloudflare.com/ajax/libs/vue/2.1.8/vue.min.js

使用方法如例:

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>Vue 测试实例 - 菜鸟教程(runoob.com)</title>

<script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>

//script引入

</head>

<body>

<div id="app">

  <p>{{ message }}</p>

</div>

 

<script>

new Vue({

  el: '#app',

  data: {

    message: 'Hello Vue.js!'

  }

})

</script>

</body>

</html>

 

 

NPM方法:

#查看版本

$ npm -v

#升级

cnpm install npm -g

#升级或安装

cnpm install cnpm -g

$cnpm install vue(用vue.js构建大型应用时使用)

命令行工具

#全局安装 vue-cli

$ cnpm install --global vue-cli

#创建一个基于webpack模板的新项目

$vue init webpack my-project

#配置,默认回车

This will install Vue 2.x version of the template.

For Vue 1.x use:vue init webpack#1.0 my-project

? Project name my-project

? Project description A Vue.js project

? Author runoob <test@runoob.com>

? Vue build standalone? Use ESLint to lint your code? Yes

? Pick an ESLint preset Standard? Setup unit tests with Karma + Mocha? Yes

? Setup e2e tests with Nightwatch? Yes

   vue-cli · Generated "my-project".

To get started:

  cd my-project

     npm install

     npm run dev

   

进入项目,安装并运行:

$ cd my-project

$ cnpm install

$ cnpm run dev

 DONE  Compiled successfully in 4388ms

> Listening at http://localhost:8080

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title></title>

<script src="vue.js" type="text/javascript" charset="utf-8"></script>

</head>

<body>

<div id="app">

  {{ message }} {{name}}

</div>

 

<script type="text/javascript">

var app = new Vue({

el: '#app',

data: {

message: 'Hello Vue!',

name : "Vue"

}

});

</script>

 

</body>

</html>

 

 

### 安装 `npm`

`npm` 全称为 `Node Package Manager`,是一个基于`Node.js`的包管理器,也是整个`Node.js`社区最流行、支持的第三方模块最多的包管理器。

```

npm -v

```

 

### 由于网络原因 安装 `cnpm`

```

npm install -g cnpm --registry=https://registry.npm.taobao.org

```

 

### 安装 `vue-cli`

```

cnpm install -g @vue/cli

```

 

### 安装 `webpack`

`webpack` 是  `JavaScript` 打包器(module bundler)

```

cnpm install -g webpack

```

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title></title>

<script src="vue.js" type="text/javascript" charset="utf-8"></script>

</head>

<body>

<div id="app">

{{msg}}

</div>

<script type="text/javascript">

var vm = new Vue({

el : "#app",

data : {

msg : "hi vue",

},

//在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。

beforeCreate:function(){

console.log('beforeCreate');

},

/* 在实例创建完成后被立即调用。

在这一步,实例已完成以下的配置:数据观测 (data observer),属性和方法的运算,watch/event 事件回调。

然而,挂载阶段还没开始,$el 属性目前不可见。 */

created :function(){

console.log('created');

},

//在挂载开始之前被调用:相关的渲染函数首次被调用

beforeMount : function(){

console.log('beforeMount');

 

},

//el 被新创建的 vm.$el 替换, 挂在成功

mounted : function(){

console.log('mounted');

 

},

//数据更新时调用

beforeUpdate : function(){

console.log('beforeUpdate');

 

},

//组件 DOM 已经更新, 组件更新完毕

updated : function(){

console.log('updated');

 

}

});

setTimeout(function(){

vm.msg = "change ......";

}, 3000);

</script>

</body>

</html>

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title></title>

<script src="vue.js" type="text/javascript" charset="utf-8"></script>

</head>

<body>

<div id="app">

{{msg}}

<p>Using mustaches: {{ rawHtml }}</p>

<p v-html="rawHtml"></p>

<div v-bind:class="color">test...</div>

<p>{{ number + 1 }}</p>

<p>{{ 1 == 1 ? 'YES' : 'NO' }}</p>

<p>{{ message.split('').reverse().join('') }}</p>

</div>

<script type="text/javascript">

var vm = new Vue({

el : "#app",

data : {

msg : "hi vue",

rawHtml : '<span style="color:red">this is should be red</span>',

color:'blue',

number : 10,

ok : 1,

message : "asvue"

}

});

vm.msg = "hi....";

</script>

<style type="text/css">

.red{color:red;}

.blue{color:blue; font-size:100px;}

</style>

</body>

</html>

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title></title>

<script src="vue.js" type="text/javascript" charset="utf-8"></script>

</head>

<body>

<div id="app">

<p v-if="seen">现在你看到我了</p>

<a v-bind:href="url">...</a>

<div @click="click1">

<div @click.stop="click2">

click me

</div>

</div>

</div>

<script type="text/javascript">

var vm = new Vue({

el : "#app",

data : {

seen : true,

url : "https://cn.vuejs.org/v2/guide/syntax.html#%E6%8C%87%E4%BB%A4"

},

methods:{

click1 : function () {

 

console.log('click1......');

},

click2 : function () {

// vm.url=null;

console.log('click2......');

}

}

});

</script>

<style type="text/css">

 

</style>

</body>

</html>

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title></title>

<script src="vue.js" type="text/javascript" charset="utf-8"></script>

</head>

<body>

<div id="app">

<div

class="test"

v-bind:class="[ isActive ? 'active' : '', isGreen ? 'green' : '']"

style="width:200px; height:200px; text-align:center; line-height:200px;">

hi vue

</div>

 

<div

:style="{color:color, fontSize:size, background: isRed ? '#FF0000' : ''}">

hi vue

</div>

</div>

<script type="text/javascript">

var vm = new Vue({

el : "#app",

data : {

isActive : true,

isGreen : true,

color : "#FFFFFF",

size : '50px',

isRed : true

}

});

</script>

<style>

.test{font-size:30px;}

.green{color:#00FF00;}

.active{background:#FF0000;}

</style>

</body>

</html>

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title></title>

<script src="vue.js" type="text/javascript" charset="utf-8"></script>

</head>

<body>

<div id="app">

<div v-if="type === 'A'">

  A

</div>

<div v-else-if="type === 'B'">

  B

</div>

<div v-else-if="type === 'C'">

  C

</div>

<div v-else>

  Not A/B/C

</div>

<h1 v-show="ok">Hello!</h1>

</div>

<script type="text/javascript">

var vm = new Vue({

el : "#app",

data : {

type : "A",

ok : false

}

});

</script>

<style type="text/css">

 

</style>

</body>

</html>

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title></title>

<script src="vue.js" type="text/javascript" charset="utf-8"></script>

</head>

<body>

<div id="app">

<ul>

<li v-for="item,index in items" :key="index">

{{index+1}}{{ item.message }}

</li>

</ul>

<ul>

<li v-for="value, key in object">

{{key}} : {{ value }}

</li>

</ul>

</div>

<script type="text/javascript">

var vm = new Vue({

el : "#app",

data : {

items : [

{ message: 'Foo' },

{ message: 'Bar' },

{ message: 'Bar' }

],

object: {

title: 'How to do lists in Vue',

author: 'Jane Doe',

publishedAt: '2016-04-10'

}

}

});

</script>

</body>

</html>

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title></title>

<script src="vue.js" type="text/javascript" charset="utf-8"></script>

</head>

<body>

<div id="app">

<div id="example-1">

<button v-on:click="counter += 1"> 数值 :  {{ counter }} </button><br />

<button v-on:dblclick="greet('abc', $event)">Greet</button>

</div>

</div>

<script type="text/javascript">

var vm = new Vue({

el : "#app",

data : {

counter: 0,

// name : "vue"

},

methods:{

greet : function (str, e) {

alert(str);

console.log(e);

}

}

});

</script>

<style type="text/css">

 

</style>

</body>

</html>

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title></title>

<script src="vue.js" type="text/javascript" charset="utf-8"></script>

</head>

<body>

<div id="app">

<div id="example-1">

<input v-model="message" placeholder="edit me">

<p>Message is: {{ message }}</p>

<textarea v-model="message2" placeholder="add multiple lines"></textarea>

<p style="white-space: pre-line;">{{ message2 }}</p>

<br />

 

<div style="margin-top:20px;">

<input type="checkbox" id="jack" value="Jack" v-model="checkedNames">

<label for="jack">Jack</label>

<input type="checkbox" id="john" value="John" v-model="checkedNames">

<label for="john">John</label>

<input type="checkbox" id="mike" value="Mike" v-model="checkedNames">

<label for="mike">Mike</label>

<br>

<span>Checked names: {{ checkedNames }}</span>

</div>

 

<div style="margin-top:20px;">

<input type="radio" id="one" value="One" v-model="picked">

<label for="one">One</label>

<br>

<input type="radio" id="two" value="Two" v-model="picked">

<label for="two">Two</label>

<br>

<span>Picked: {{ picked }}</span>

</div>

<button type="button" @click="submit">提交</button>

</div>

 

</div>

<script type="text/javascript">

var vm = new Vue({

el : "#app",

data : {

message : "test",

message2 :"hi",

checkedNames : ['Jack', 'John'],

picked : "Two"

},

methods: {

submit : function () {

console.log(this.message2);

 

}

}

});

</script>

<style type="text/css">

 

</style>

</body>

</html>

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title></title>

<script src="vue.js" type="text/javascript" charset="utf-8"></script>

</head>

<body>

<div id="app">

<button-counter title="title1 : " @clicknow="clicknow">

<h2>hi...h2</h2>

</button-counter>

<button-counter title="title2 : "></button-counter>

<button-counter title="title3 : "></button-counter>

</div>

<script type="text/javascript">

Vue.component('button-counter', {

props: ['title'],

data: function () {

return {

  count: 0

}

},

template: '<div><h1>hi...</h1><button v-on:click="clickfun">{{title}} You clicked me {{ count }} times.</button><slot></slot></div>',

methods:{

clickfun : function () {

this.count ++;

this.$emit('clicknow', this.count);

}

}

})

var vm = new Vue({

el : "#app",

data : {

 

},

methods:{

clicknow : function (e) {

console.log(e);

}

}

});

</script>

<style type="text/css">

 

</style>

</body>

</html>

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title></title>

<script src="vue.js" type="text/javascript" charset="utf-8"></script>

</head>

<body>

<div id="app">

<button-counter></button-counter>

<test></test>

<button-counter></button-counter>

</div>

<script type="text/javascript">

Vue.component('button-counter', {

props: ['title'],

data: function () {

return {}

},

template: '<div><h1>hi...</h1></div>',

methods:{

 

}

})

var vm = new Vue({

el : "#app",

data : {

 

},

methods:{

clicknow : function (e) {

console.log(e);

}

},

components:{

test : {

template:"<h2>h2...</h2>"

}

}

});

</script>

<style type="text/css">

 

</style>

</body>

</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值