Vue.js随学随记

1. v-bind和v-model理解

1.1 v-bind

v-bind代表元素的某个属性交给vue处理,实现元素属性和vue的绑定,v-bind="表达式",引号里面的本质是表达式。但是这种绑定是单向的。比如下面的代码,当你在网页中修改input中值的时候,上面的message内容不会随着修改。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script type="text/javascript" src="vue.js"></script>
    </head>
    <body>
        <div id="app">
            <div>{{message}}</div>
            <div>
                <input type="text" v-bind:value="message"/>
            </div>
        </div>

        <script type="text/javascript">
            var vm = new Vue({
                el:"#app",
                data:{
                    message:"Welcome to Vue"
                }
            });
        </script>
    </body>
</html>

如果想实现双向绑定,还需要向下方一样为标签添加v-on指令,这样在修改input里面内容的时候,上面message的内容也会相应的修改。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script type="text/javascript" src="vue.js"></script>
    </head>
    <body>
        <div id="app">
            <div>{{message}}</div>
            <div>
                <input type="text" v-on:input="message = $event.target.value" v-bind:value="message"/>
            </div>
        </div>
        <script type="text/javascript">
            var vm = new Vue({
                el:"#app",
                data:{
                    message:"Welcome to Vue"
                }
            });
        </script>
    </body>
</html>

1.2 v-model

v-model实际上是v-bind:和v-on:的语法糖,实现了简易的元素属性双向绑定。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script type="text/javascript" src="vue.js"></script>
    </head>
    <body>
        <div id="app">
            <div>{{message}}</div>
            <div>
                <input type="text" v-model="message"/>
                <!--上方代码等同于下方代码
                <input type="text" v-on:input="message = $event.target.value" v-bind:value="message"/>
                -->
            </div>
        </div>
        <script type="text/javascript">
            var vm = new Vue({
                el:"#app",
                data:{
                    message:"Welcome to Vue"
                }
            });
        </script>
    </body>
</html>

2. v-on:click 事件调用函数的问题。

2.1 方法一:直接调用函数名

<button v-on:click="change">改变一下</button>

这种情况下,函数被调用时,自动传递$event参数。

2.2 方法二:调用函数名()

这种情况下,函数被调用时,不会自动传递$event参数,如果需要,则必须人工指定为函数名($event)。也就是说下面的代码等同于上面的代码:

<button v-on:click="change($event)">改变一下</button>

3. v-if和v-show的区别。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script type="text/javascript" src="vue.js"></script>
    </head>
    <body>
        <div id="app">
            <button type="button" v-if="isShowButton">使用v-if判断</button>
            <button type="button" v-show="isShowButton">使用v-show判断</button>
        </div>
        <script type="text/javascript">
            var vm = new Vue({
                el:"#app",
                data:{
                    isShowButton:false
                }
            });
        </script>
    </body>
</html>

运行结果如下:
file

  • 对于v-if,如果=后面的表达式是false,则整个标签不会显示。
  • 对于v-show,如果=后面的表达式是false,则会以display:none的形式隐藏标签。

4. v-for对数组和对象的使用方法。

4.1 示例代码

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script type="text/javascript" src="vue.js"></script>
    </head>
    <body>
        <div id="app">
            <table border="1" cellspacing="0" cellpadding="0">
                <tr><th>姓名</th><th>性别</th><th>分数</th></tr>
                <tr v-for="student,arrayIndex in students">
                    <td v-for="value,key,objectIndex in student">{{arrayIndex}} - {{objectIndex}} - {{key}} - {{value}}</td>
                </tr>
            </table>
        </div>
        <script type="text/javascript">
            var vm = new Vue({
                el:"#app",
                data:{
                    students:[
                        {name:"张三",gender:"男",score:"100"},
                        {name:"李四",gender:"女",score:"88"},
                        {name:"王五",gender:"男",score:"99"}
                    ]
                }
            });
        </script>
    </body>
</html>

运行结果如下:
file

4.2 对于数组

<tr v-for="student,arrayIndex in students">
</tr>

遍历students数组的每一个元素。

4.3 对于对象

<td v-for="value,key,objectIndex in student">{{arrayIndex}} - {{objectIndex}} - {{key}} - {{value}}</td>

遍历student对象的每一个属性。

5. Vue-cli 3.0 的使用

5.0 理解Vue-cli的关键点

vue-cli是将Node.js和webpack封装进了vue-cli内部。

5.1 安装Vue-cli 3.0

cnpm install -g @vue/cli

需要注意的是,如果之前安装过Vue-cli的2.X版本,需要先卸载之前的版本再安装。卸载方法在安装Vue-cli 3.0的时候有提示,这里不赘述。

5.2 创建项目

安装完Vue-cli 3.0工具后,我们在命令行里面就可以直接使用vue命令了,下面的命令用于创建一个Vue.js的项目框架:

vue create 项目名

这里面有几个注意点:

  1. vue create 项目名命令只对Vue-cli 3.0及以后版本有效,2.X版本无法使用vue create命令
  2. 运行这个命令后,会自动在cmd当前目录下创建【项目名】文件夹,然后在里面生成Vue.js的项目框架。
  3. 这里要特别解释下“脚手架”这个词。初次学Vue.js的时候,对“脚手架”工具特别不理解,不明白啥叫脚手架。说白了,“脚手架”就是辅助工具。Vue-cli的作用就是辅助进行大型的Vue.js项目开发。如果只是在项目中一般性的使用Vue.js,在网页中使用script引入Vue.js文件就够了,不是必须使用Vue-cli脚手架工具。
  4. 项目创建好后,项目的目录结构如下:
    file
    从上面的截图能看出来,其实vue create命令创建的是个node.js项目。其目的和原因也很简单:通过Node.js模拟服务器运行及热更新环境,这样可以让开发过程更加简单、高效。所以,如果要使用Vue-cli工具,前提是机器中必须提前安装了Node.js(如果不使用Vue-cli工具而是只用Vue.js,可以没有Node.js环境)。

5.3 构建项目

既然vue create项目创建的是Node.js项目,那么当时用npm run命令的时候,就可以直接调用package.json里面<script>标签下的三个命令。

5.1.1 serve命令:开发环境构建
npm run serve

这一步最主要的操作是通过Node.js启动一个Web服务器,这样可以直接在本地模拟服务器环境。

5.1.2 build命令:生产环境构建
npm run build

运行这个命令后,会在项目根目录生成一个【dist】文件夹,这里面的文件是经过编译、打包、压缩后,最终用于部署到服务器上的代码。
实际上,这个操作是webpack做的,vue-cli只是把webpack封装进去了。。

5.1.3 lint命令:代码检查工具
npm run lint

6 vue-router路由库使用

6.1 关于SPA

vue-router路由一般使用在SPA(Single Page Application)单页面程序上。SPA的简单的来说就是无论程序有多复杂,所有程序代码都写在一个页面上。
当然,在开发阶段,SPA项目开始分模块开发的,开发完毕后会通过构建工具将各类模块组成一个单页面程序。
SPA的有点有很多,比如:一次加载后,页面无需再跳转和下载新内容,页面速度快;再比如:有效降低网页被复制和爬取的风险。缺点也很明显,搜索引擎索引起来不是很好。不过SPA程序一开始就不是为搜索引擎而设计的。

6.2 vue-router

vue-router是vue.js的官方路由工具。第三方路由如Page.js、Director也很好用,与vue.js的集成也比较容易。

6.3 vue-router的安装

cnpm install vue-router --save

或者直接下载vue-router.js导入到项目中。

6.4 vue-router的使用

6.4.1 HTML代码
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>

<div id="app">
  <h1>Hello App!</h1>
  <p>
    <!-- 使用 router-link 组件来导航. -->
    <!-- 通过传入 `to` 属性指定链接. -->
    <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
    <router-link to="/foo">Go to Foo</router-link>
    <router-link to="/bar">Go to Bar</router-link>
  </p>
  <!-- 路由出口 -->
  <!-- 路由匹配到的组件将渲染在这里 -->
  <router-view></router-view>
</div>
6.4.2 Javascript代码
// 0. 如果使用模块化机制编程,导入 Vue 和 VueRouter,要调用 Vue.use(VueRouter)

// 1. 定义(路由)组件。
// 可以从其他文件 import 进来
const Foo = { template: '<div>foo</div>' }
const Bar = { template: '<div>bar</div>' }

// 2. 定义路由
// 每个路由应该映射一个组件。 其中"component" 可以是
// 通过 Vue.extend() 创建的组件构造器,
// 或者,只是一个组件配置对象。
// 我们晚点再讨论嵌套路由。
const routes = [
  { path: '/foo', component: Foo },
  { path: '/bar', component: Bar }
]

// 3. 创建 router 实例,然后传 `routes` 配置
// 你还可以传别的配置参数, 不过先这么简单着吧。
const router = new VueRouter({
  routes // (缩写)相当于 routes: routes
})

// 4. 创建和挂载根实例。
// 记得要通过 router 配置参数注入路由,
// 从而让整个应用都有路由功能
const app = new Vue({
  router
}).$mount('#app')

// 现在,应用已经启动了!

当然,上面代码也可以稍微简化一下:

const Foo = { template: '<div>foo</div>' }
const Bar = { template: '<div>bar</div>' }

const router = new VueRouter({
  routes = [
    { path: '/foo', component: Foo },
    { path: '/bar', component: Bar }
  ]
})

const app = new Vue({
  router
}).$mount('#app')

通过Vue-cli创建Vue项目流程

0 .Vue.js,Vue-cli,Node.js的理解。

一个js文件就是Vue.js

项目中,通过<script>标签引入一个vue.js文件,这就是我们理解的Vue.js。

命令行里运行vue就是Vue-cli

如果想要在cmd里面运行vue命令,那么就需要安装vue-cli工具。

Node.js就是Javascript的JVM

Node.js就好像是Javascript世界里面的JVM。
vue-cli工具是通过npm的安装的。

1. 安装Node.js

Node.js环境具体安装方法见:http://www.moonlightgate.com/archives/278

2. 安装vue-cli

vue-cli在vue官网上叫做“脚手架工具”,其实就是个vue的客户端(client)。安装命令如下:

npm install -g vue-cli  //这是npm命令

3. 基于webpack-simple初始化项目

当然,你可以不基于webpack-simple初始化项目,通过vue list命令可以看到,有以下几种初始化方式备选:
file
通过命令行切换到你的项目创建目录,运行如下命名:

vue init webpack-simple my-project //这是vue命令

这时,基于webpack-simple创建的项目就建好了。

4. 安装相关的依赖。

第三步只是创建了项目骨架,在你实际运行这个项目前,还需要根据自动生成的package.json文件,安装相关的依赖,安装依赖命令如下:

cd my-project //先进到项目目录。
npm install //或者cnpm install,这是npm命令

5. 运行项目

npm run dev //这也是npm命令,npm run命令将会运行项目中的package.json文件中的script部分内容。run后面跟dev,就是运行package.json文件中script部分的dev部分内容。

Vue.js组件学习(4)高级篇—单文件组件

1. 单文件组件的意义。

在很多 Vue 项目中,我们使用 Vue.component 来定义全局组件,紧接着用 new Vue({ el: '#container '}) 在每个页面内指定一个容器元素。

这种方式在很多中小规模的项目中运作的很好,在这些项目里 JavaScript 只被用来加强特定的视图。但当在更复杂的项目中,或者你的前端完全由 JavaScript 驱动的时候,下面这些缺点将变得非常明显:

  • 全局定义 (Global definitions) 强制要求每个 component 中的命名不得重复
  • 字符串模板 (String templates) 缺乏语法高亮,在 HTML 有多行的时候,需要用到丑陋的 \
  • 不支持 CSS (No CSS support) 意味着当 HTML 和 JavaScript 组件化时,CSS 明显被遗漏
  • 没有构建步骤 (No build step) 限制只能使用 HTML 和 ES5 JavaScript, 而不能使用预处理器,如 Pug (formerly Jade) 和 Babel

文件扩展名为 .vue 的 single-file components(单文件组件) 为以上所有问题提供了解决方法,并且还可以使用 webpack 或 Browserify 等构建工具。

2. 单文件组建的使用环境搭建。

在本机安装:

  • npm(Node.js)
  • vue-cli
  • webpack

3. 单文件组件的结构。

<template>
</template>

<script>
</script>

<style>
</style>

4. 第一个单文件组件的例子。

4.1 新建一个Vue项目

可以通过vue命令行创建:

vue init webpack 项目名

也可以通过HBuilder创建:

4.2 创建完的项目目录结构如下:

file

  • node_modules:依赖文件
  • public:静态文件
  • src
    • assets:资源文件
    • components:单文件组件文件
    • App.vue:项目入口文件
    • main.js:主js文件

4.3 新建test.vue

在components下新建test.vue文件,内容如下:

<template>
    <button>{{btncontent}}</button>
</template>

<script>
    export default{
        props:["btncontent"],
        data:function(){
            return {
            }
        }
    }
</script>

<style>
</style>

4.4 修改App.vue

<template>
  <div id="app">
    <SuperButton btncontent="点我吧!"></SuperButton>
  </div>
</template>

<script>
import SuperButton from './components/test.vue'

export default {
  components: {
    SuperButton
  }
}
</script>

<style>
</style>

这样就可以了!

Vue.js组件学习(3)升级篇

1. 组件的命名规则

1.1 两种命名可选方案

使用kebab-case(短横线分隔命名)方法命名

Vue.component('my-component-name', { /* ... */ })
当使用 kebab-case (短横线分隔命名) 定义一个组件时,你也必须在引用这个自定义元素时使用 kebab-case,例如 <my-component-name>

使用PascalCase(驼峰命名法)方法命名

Vue.component('MyComponentName', { /* ... */ })
当使用 PascalCase (首字母大写命名) 定义一个组件时,你在引用这个自定义元素时两种命名法都可以使用。也就是说 <my-component-name><MyComponentName> 都是可接受的。注意,尽管如此,直接在 DOM (即非字符串的模板) 中使用时只有 kebab-case 是有效的。

1.2 强烈建议使用kebab-case命名法

命名组件的时候,强烈推荐使用kebab-case方法命名。这样可以避免和HTML既有元素相冲突。

2. 组件中的props命名规则

HTML中的attribute名是大小写不敏感的,所以浏览器会把所有大写字符解释为小写字符。这意味着当你使用DOM中的模板时,camelCase (驼峰命名法)的prop名需要使用其等价的kebab-case(短横线分隔命名)命名:

Vue.component('blog-post', {
  // 在 JavaScript 中是 camelCase 的
  props: ['postTitle'],
  template: '<h3>{{ postTitle }}</h3>'
})
<!-- 在 HTML 中是 kebab-case 的 -->
<blog-post post-title="hello!"></blog-post>

如果你使用字符串模板,那么这个限制就不存在了。

3. 组建的全局注册和局部注册

3.1 全局注册和使用。

Vue.component("Com-Name",{...});

全局注册后,任何新创建的Vue根实例id对应的模板中都可以直接使用。

3.2 局部注册和使用

var newCom = {...}

局部注册后,如果需要使用,则需要在创建的Vue的components选项中先定义你想要使用的组件。

var vm = new Vue({
el:"app",
components:{
    'new-com':newCom
}
data:{}
});

Vue.js组件学习(2)进阶篇

1. 监听子组件事件

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>About Component</title>
        <script src="vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
        <div id="app">
            <div v-bind:style="{fontSize:newsFontSize+'px'}">
                Hello Component!<br/>
                <news-show v-for="item in news" v-bind:newsprops="item" v-on:zoom-in-text="newsFontSize+=1"></news-show>
            </div>
        </div>    
        <script type="text/javascript">
            Vue.component("news-show",{
                template:`<p>
                          <span>TITLE:{{newsprops.title}}</span> 
                          <span>CONTENT:{{newsprops.content}}</span> 
                          <span>TIME:{{newsprops.time}}</span> 
                          <button v-on:click="$emit(\'zoom-in-text\')">放大文字</button>
                          </p>`,
                props:["newsprops"]
            });
            var vm = new Vue({
                el:app,
                data:{
                    news:[
                        {title:"标题1",content:"内容1",time:"2020-01-01"},
                        {title:"标题2",content:"内容2",time:"2020-01-02"},
                        {title:"标题3",content:"内容3",time:"2020-01-03"},
                        ],
                    newsFontSize:20
                }
            });
        </script>
    </body>
</html>

以上代码理解方式如下:
file

2. 使用事件抛出一个值

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>About Component</title>
        <script src="vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
        <div id="app">
            <div v-bind:style="{fontSize:newsFontSize+'px'}">
                Hello Component!<br/>
                <news-show v-for="item in news" v-bind:newsprops="item" v-on:zoom-in-text="newsFontSize+=$event"></news-show>
            </div>
        </div>    
        <script type="text/javascript">
            Vue.component("news-show",{
                template:`<p>
                          <span>TITLE:{{newsprops.title}}</span> 
                          <span>CONTENT:{{newsprops.content}}</span> 
                          <span>TIME:{{newsprops.time}}</span> 
                          <button v-on:click="$emit('zoom-in-text',5)">放大文字</button>
                          </p>`,
                props:["newsprops"]
            });
            var vm = new Vue({
                el:app,
                data:{
                    news:[
                        {title:"标题1",content:"内容1",time:"2020-01-01"},
                        {title:"标题2",content:"内容2",time:"2020-01-02"},
                        {title:"标题3",content:"内容3",time:"2020-01-03"},
                        ],
                    newsFontSize:20
                }
            });
        </script>
    </body>
</html>

以上代码理解方式如下:

file

3. 组件的插槽功能

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>About Component</title>
        <script src="vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
        <div id="app">
            <div v-bind:style="{fontSize:newsFontSize+'px'}">
                Hello Component!<br/>
                <news-show v-for="item in news" v-bind:newsprops="item" v-on:zoom-in-text="newsFontSize+=$event">插槽内容,哈哈哈!</news-show>
            </div>
        </div>    
        <script type="text/javascript">
            Vue.component("news-show",{
                template:`<p>
                          <span>TITLE:{{newsprops.title}}</span> 
                          <span>CONTENT:{{newsprops.content}}</span> 
                          <slot></slot>
                          <span>TIME:{{newsprops.time}}</span> 
                          <button v-on:click="$emit('zoom-in-text',5)">放大文字</button>
                          </p>`,
                props:["newsprops"]
            });
            var vm = new Vue({
                el:app,
                data:{
                    news:[
                        {title:"标题1",content:"内容1",time:"2020-01-01"},
                        {title:"标题2",content:"内容2",time:"2020-01-02"},
                        {title:"标题3",content:"内容3",time:"2020-01-03"},
                        ],
                    newsFontSize:20
                }
            });
        </script>
    </body>
</html>

以上内容的重点如下:
file

Vue.js组件学习(1)基础篇

关于Vue.js官网教程的点点疑问

我是通过Vue.js官网(https://cn.vuejs.org) 学习的Vue技术,先看的视频,后看的文档。
在看视频教程的时候,主讲人说的英文差到我怀疑人生,我当时在想:Vue.js的创始人不是在美国留学的高材生吗?怎么英语还会这么差?不过转念一想,主讲人肯定不是创始人呀,所以英文差也是可以理解的。
然后我又看的文档教程,文档教程中文语言的晦涩程度又让我咋舌,感觉像是硬生生的从英文直译过来的一样。
所以呢,真心建议Vue.js好好的优化一下教程。
以下内容是我综合了Vue.js官网和诸多教程的内容,用相对简单的话素进行了描述,希望能帮到初学者。

1. 什么是组件

组件可以理解为将某些控件、功能集成在一起的类。
在代码中调用页面的方法是:<组件名></组件名>
作为初学者,我更愿意把组件理解为“自定义标签”,将若干复杂的空间、功能封装在一个标签内,然后再去调用。比如,你可以把网页导航条的全部代码封装在组件中。

2. 最简单的组件的定义和使用

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>About Component</title>
        <script src="vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
        <div id="app">
            Hello Component!<br/>
            <button-counter></button-counter>
        </div>

        <script type="text/javascript">
            Vue.component("button-counter",{
                template:'<button>Button Counter</button>',
            });

            var vm = new Vue({
                el:app
            });
        </script>
    </body>
</html>

这里面的逻辑关系是这样的:

  1. 定义(注册)一个组件。
  2. 通过new Vue创建Vue的根实例。
  3. 在Vue的根实例中使用已经定义(注册)的组件。

注意:

  • 1、2步顺序不可以颠倒,也就是说,组件要先于Vue根实例定义(注册)。
  • 组件的定义(注册)有两种形式:全局注册局部注册,本例中的组件是采用全局注册的形式进行定义(注册)的。
  • 全局注册的组件可以用在其被注册之后的任何 (通过 new Vue) 新创建的Vue根实例中,也包括其组件树中的所有子组件的模板中。

file

3. 给组件增加data

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>About Component</title>
        <script src="vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
        <div id="app">
            Hello Component!<br/>
            <button-counter></button-counter>
        </div>

        <script type="text/javascript">
            Vue.component("button-counter",{
                template:'<button v-on:click="count++">Button Counter {{count}} times!</button>',
                data:function(){
                    return {count:0};
                }
            });
            var vm = new Vue({
                el:app
            });
        </script>
    </body>
</html>

上面的代码实现了<button-counter>组件的点击自增功能,这里面值得注意的如下:

  1. 可以为组件增加data选项。但data并不是像在new Vue定义时对应一个对象:data: {count: 0};取而代之的是,一个组件的data选项必须对应一个函数,这样每个组件的实例可以单独维护一份独立的拷贝。如果Vue没有这条规则,则组件实例间的data选项则是共享的。
  2. 组件data选项中的元素可以在组件template中被使用。
    file

4. 给组件增加props进行简单数据交互

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>About Component</title>
        <script src="vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
        <div id="app">
            Hello Component!<br/>
            <button-counter title="你好!属性"></button-counter>
        </div>

        <script type="text/javascript">
            Vue.component("button-counter",{
                template:'<button v-on:click="count++">{{title}} Button Counter {{count}} times!</button>',
                data:function(){
                    return {count:0};
                },
                props:["title"]
            });
            var vm = new Vue({
                el:app
            });
        </script>
    </body>
</html>

上面的代码值得注意的如下:
file

5. 给组件增加props进行复杂数据交互

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>About Component</title>
        <script src="vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
        <div id="app">
            Hello Component!<br/>
            <news-show v-for="item in news" v-bind:title="item.title" v-bind:content="item.content" v-bind:time="item.time"></news-show>
        </div>    
        <script type="text/javascript">
            Vue.component("news-show",{
                template:'<p><span>TITLE:{{title}}</span> <span>CONTENT:{{content}}</span> <span>TIME:{{time}}</span></p>',
                props:["title","content","time"]
            });
            var vm = new Vue({
                el:app,
                data:{
                    news:[
                        {title:"标题1",content:"内容1",time:"2020-01-01"},
                        {title:"标题2",content:"内容2",time:"2020-01-02"},
                        {title:"标题3",content:"内容3",time:"2020-01-03"},
                        ]
                }
            });
        </script>
    </body>
</html>

上面这个复杂些,理解方法如下:
file

6. 对第5部分的属性交换代码进行简化。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>About Component</title>
        <script src="vue.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
        <div id="app">
            Hello Component!<br/>
            <news-show v-for="item in news" v-bind:newsprops="item"></news-show>
        </div>    
        <script type="text/javascript">
            Vue.component("news-show",{
                template:'<p><span>TITLE:{{newsprops.title}}</span> <span>CONTENT:{{newsprops.content}}</span> <span>TIME:{{newsprops.time}}</span></p>',
                props:["newsprops"]
            });
            var vm = new Vue({
                el:app,
                data:{
                    news:[
                        {title:"标题1",content:"内容1",time:"2020-01-01"},
                        {title:"标题2",content:"内容2",time:"2020-01-02"},
                        {title:"标题3",content:"内容3",time:"2020-01-03"},
                        ]
                }
            });
        </script>
    </body>
</html>

上面这部分可能更加不好理解,解释如下:
file

Vue.js快速入门—一页代码搞定基础语法

<!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>{{a}}</div>
            <div v-once>{{b}}</div>
            <div v-html="c"></div>
            <div v-bind:class="d_class">{{d}}</div>
            <div>{{e+1}}</div>
            <div>{{f ? "TRUE" : "NO"}}</div>
            <div>{{g.split("")}}</div>
            <div v-if="h==1">v-if测试,h是1的时候我才显示!</div>
            <div v-else-if="h==2">v-if测试,h是2的时候我才显示!</div>
            <div v-else-if="h==3">v-if测试,h是3的时候我才显示!</div>
            <div v-else-if="h==4">v-if测试,h是4的时候我才显示!</div>
            <div v-else>v-if测试,h是其它值的时候我才显示!</div>
            <div v-bind:class="{green:isGreen}">{{i}}</div>
            <div :style="{fontSize: is100px ? '100px' : ''}">{{i}}</div>
            <div v-show="j">j是true的时候显示我!</div>
            <div>
                <ul>
                    <li v-for="value,key in k">
                        {{key}}-{{value}}
                    </li>
                </ul>
            </div>
            <div>
                <ul>
                    <li v-for="value,index in m">
                        {{index}}-{{value}}
                    </li>
                </ul>
            </div>
            <div v-on:click="click1">
                <div v-on:click.stop="click2">
                    点一下我!
                </div>
            </div>
            <div v-on:dblclick="click3">
                双击我!
            </div>
            <div>
                <input v-model="n1" />
                <p>{{n1}}</p>
                <textarea v-model="n2"></textarea>
                <p>{{n2}}</p>
            </div>
        </div>
        <script type="text/javascript">
            var vm = new Vue({
                el:app,
                data:{
                    a:"aValue",
                    b:"bValue",
                    c:"<span style='color:red'>cValue</span>",
                    d:"dValue",
                    d_class:"red",
                    e:108,
                    f:true,
                    g:"Hello World!",
                    h:3,
                    i:"iValue",
                    isGreen:true,
                    is100px:true,
                    j:true,
                    k:{messageK1:"valueK1",messageK2:"valueK2"},
                    m:[{messageM1:"valueM1"},{messageM2:"valueM2"}],
                    n1:"我是n1初始值!",
                    n2:"我是n2初始值!"
                },
                methods:{
                    click1 : function(){
                        console.log("Click1..."+this.a);
                    },
                    click2 : function(){
                        console.log("Click2..."+this.b);
                    },
                    click3 : function(){
                        alert("我被双击了!");
                    }
                }
            });
        </script>
        <script type="text/javascript">
            vm.$data.a = "newAValue";
            vm.$data.b = "newBValue";
            vm.$data.c = "<span style='color:red'>newCValue</span>";
            vm.$data.d_class = "green";
        </script>
        <style type="text/css">
            .red{color:red;}
            .green{color:green;}
        </style>
    </body>
</html>

什么是Vue.js?第一个Vue.js程序

1. Javascript框架三巨头

  • Vue.js 2014年2月作者尤雨溪(中国)推出,由于Vue.js已经成为阿里生态的一部分,加之由国人开发,因此已经成为国内最火的js框架。
  • Angular.js 2009年由作者Miško Hevery和Adam Abrons推出,后被Google收购
  • React.js 2013年5月由作者Jordan Walke推出

从世界范围来讲,Vue.js的普及率还不及Angular.js和React.js,但是在国内,Vue.js的使用率远高于其他两个框架。

2. 什么是Vue.js

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

3. 第一个Vue.js程序

3.1 从官网下载Vue.js脚本文件。

下载后的文件可以放在你习惯使用的项目目录里。

3.2 与vue.js同级新建index.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">
            {{message}}
        </div>
        <script type="text/javascript">
            var app = new Vue({
                el:"#app",
                data:{
                    message:"Hello Vue!"
                }
            });
        </script>
    </body>
</html>

通过浏览器访问以下index.html就可以了。