1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta charset="utf-8">
5 <title></title>
6 </head>
7 <style>
8 <!-- v-cloak 能解决插件表达式闪烁问题 -->
9 [v-cloak]{
10 display: none;
11 }
12 </style>
13 <body>
14 <div id="app">
15 <!-- v-text 默认没有闪烁问题 -->
16 <!-- v-text 会覆盖元素中原本的内容,但是 插值表达式 只会替换自己的这个占位符, 不会把 整个元素的内容清空-->
17 <div v-text="msg1"></div>
18
19 <!-- v-bind 属性绑定,缩写为 :-->
20 <input type="button" value="点击" :title="mytitle + '123'" @click="begin"/>
21
22 <!-- v-on 事件绑定,缩写为 @ -->
23 <input type="button" value="停止" :title="mytitle1 + '123'" @click="stop"/>
24
25 <!-- {{ msg}} 后可以加入定值直接显示在页面上, 这是 插值表达式的好处,如果用 v-text则无法显示 今天天气好晴朗, 因为会被覆盖掉 -->
26 <p v-cloak> {{ msg }} 今天天气好晴朗</p>
27
28 <!-- 可以直接输出html格式 -->
29 <div v-html="msg2"></div>
30 </div>
31
32 </body>
33 </html>
34 <script src="../js/vue.js"></script>
35 <script>
36 var vm = new Vue({
37 el: '#app',
38 data: {
39 msg1: 'hahaha',
40 msg: '123456,789',
41 msg2: '<h1>我是一个h1</h1>',
42 mytitle: '请点击',
43 mytitle1: '点击停止',
44 intervalId: null //在data上定义 定时器Id
45 },
46 methods: {
47 begin(){
48 console.log(this.msg)
49 if (this.intervalId != null) return;
50 // 获取第一个字符 this
51 this.intervalId = setInterval( () => {
52 var start = this.msg.substring(0,1)
53 // 获取到 后面的字符
54 var end = this.msg.substring(1)
55 // 重新拼接得到新的字符串
56 this.msg = end + start
57 }, 400)
58 },
59 stop(){ //停止计时器
60 clearInterval(this.intervalId);
61 //每当清除了定时器之后,需要把 intervalId 置为 null
62 this.intervalId = null;
63 }
64 },
65 })
66 </script>
67
68
69
70 <!-- 1. 如何定义一个基本的Vue代码结构 -->
71 <!-- 2. 插值表达式 和 v-text -->
72 <!-- 3. v-cloak -->
73 <!-- 4. v-html -->
74 <!-- 5. v-bind Vue提供的属性绑定机制 缩写是 : -->
75 <!-- 6. v-on Vue提供的事件绑定机制 缩写是 @ -->