Vue demo

<pre> <code>目录/文件 说明

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 格式</code></pre>

<pre> <code>Build Setup

# install dependencies
npm install

# serve with hot reload at localhost:8080
npm run dev

# build for production with minification
npm run build

# build for production and view the bundle analyzer report
npm run build --report</code></pre>

main.js: 项目的核心文件

import Vue from 'vue'
import App from './App'
import router from './router'

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

App.vue


<!-- 展示模板 -->
<template>
  <div id="app">
    <img src="./assets/logo.png">
    <!-- 直接使用自定义组件模板 -->
    <hello></hello>

    <!-- 使用 router-link 组件来导航. -->
    <!-- 通过传入 `to` 属性指定链接. -->
    <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
    <router-link to="/foo">Go to Foo</router-link>
    <router-link to="/bar">Go to Bar</router-link>

    <!-- 字符串 -->
    <router-link to="home">Home</router-link>
    <!-- 渲染结果 -->
    <a href="home">Home</a>

    <!-- 使用 v-bind 的 JS 表达式 -->
    <!--<router-link v-bind:to="'home'">Home</router-link>-->

    <!-- 不写 v-bind 也可以,就像绑定别的属性一样 -->
    <!--<router-link :to="'home'">Home</router-link>-->

    <!-- 同上 -->
    <!--<router-link :to="{ path: 'home' }">Home</router-link>-->

    <!-- 命名的路由 -->
    <!--<router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link>-->

    <!-- 带查询参数,下面的结果为 /register?plan=private -->
    <!--<router-link :to="{ path: 'register', query: { plan: 'private' }}">register</router-link>-->

    <!-- 路由出口 -->
    <!-- 路由匹配到的组件将渲染在这里 -->
    <router-view></router-view>
  </div>
</template>


<script type="text/javascript">
// 导入组件
import Hello from './components/Hello'

export default {
  name: 'app',
  components: {
    Hello
  }
}
</script>

<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>




<p>路由</p>

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import Hello from '@/components/Hello'

// 0. 如果使用模块化机制编程,导入 Vue 和 VueRouter,要调用 Vue.use(VueRouter)

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

Vue.use(Router)


// 2. 定义路由
// 每个路由应该映射一个组件。 其中"component" 可以是
// 通过 Vue.extend() 创建的组件构造器,
// 或者,只是一个组件配置对象。
export default new Router({
  routes: [
    // {
    //   path: '/',
    //   name: 'HelloWorld',
    //   component: HelloWorld
    // },
    {
      path: '/hello',
      name: 'Hello',
      component: Hello
    },{
      path: '/foo',
      component: Foo
    },
    {
      path: '/bar',
      component: Bar
    },
    {
      path: '/register',
      component: Register
    }
  ]
})




<p>组件</p>

<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
    <h1>site : {{site}}</h1>
    <h1>url : {{url}}</h1>
    <h1>alexa : {{alexa}}</h1>
    <h1>{{details()}}</h1>
    <!--输出html-->
    <p v-html="message"></p>
    <!--绑定bind-->
    <p v-bind:class="{'class1':use}"></p>
    <div v-bind:id="'list-' + id">绑定id</div>
    <!-- 完整语法 -->
    <pre><a v-bind:href="url">绑定地址</a></pre>
    <!-- 缩写语法 -->
    <a :href="url">绑定地址</a>
    <p>{{5+5}}<br></p>
    {{ ok ? 'YES' : 'NO' }}<br>
    <!--if判断-->
    <p v-if="seen">现在你看到我了</p>
    <div v-if="Math.random() > 0.5">
      Sorry
    </div>
    <div v-else>
      Not sorry
    </div>

    <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>

    <!--循环-->
    <ol>
      <li v-for="site in sites">
        {{ site.name }}
      </li>
    </ol>
    <ul>
      <li>--------------</li>
      <template v-for="site in sites">
        <li>{{ site.name }}</li>
        <li>--------------</li>
      </template>
    </ul>

    <ul>
      <li v-for="value in object">
        {{ value }}
      </li>
    </ul>

    <ul>
      <li v-for="(value, key) in object">
        {{ key }} : {{ value }}
      </li>
    </ul>

    <ul>
      <li v-for="(value, key, index) in object">
        {{ index }}. {{ key }} : {{ value }}
      </li>
    </ul>

    <ul>
      <li v-for="n in 3">
        {{ n }}
      </li>
    </ul>
    <a v-on:click="hide()">点我跳转</a>
    <!--数据绑定-->
    <p>{{ message }}</p>
    <input v-model="message">
    <p>{{ bind }}</p>
    <button v-on:click="reverseMessage">反转字符串</button>
    <!--缩写-->
    <button @click="reverseMessage">反转字符串</button>

    <p style = "font-size:25px;">计数器: {{ counter }}</p>
    <button @click = "counter++" style = "font-size:25px;">点我</button>

    <!--表单-->
    <p>input 元素:</p>
    <input v-model="message" placeholder="编辑我……">
    <p>消息是: {{ message }}</p>

    <p>textarea 元素:</p>
    <p style="white-space: pre">{{ message2 }}</p>
    <textarea v-model="message2" placeholder="多行文本输入……"></textarea>

    <p>单个复选框:</p>
    <input type="checkbox" id="checkbox" v-model="checked">
    <label for="checkbox">{{ checked }}</label>

    <p>多个复选框:</p>
    <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    <label for="runoob">Runoob</label>
    <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    <label for="google">Google</label>
    <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
    <label for="taobao">taobao</label>
    <br>
    <span>选择的值为: {{ checkedNames }}</span>
    <br>
    <select v-model="selected" name="fruit">
      <option value="">选择一个网站</option>
      <option value="www.runoob.com">Runoob</option>
      <option value="www.google.com">Google</option>
    </select>

    <div id="output">
      选择的网站是: {{selected}}
    </div>
    <!--表单 end-->

    <!--自定义组件-->
    <secondcomponent></secondcomponent>
    <!--父调用child的值-->
    <p>{{parentMsg}}</p>

    <button v-on:click = "show = !show">点我</button>
    <transition name = "fade">
      <p v-show = "show" v-bind:style = "styleobj">动画实例</p>
    </transition>
  </div>
</template>


<script type="text/javascript">

import Secondcomponent from "./secondcomponent";

export default {
  components: {
    Secondcomponent
  },
  name: "hello",
    data(){
      return {
        msg: "components hello chenshuo",
        site:"test",
        url:"www.baidu.com",
        alexa:1000,
        message: '<h1>输出html及数据绑定</h1>',
        message2: 'test消息',
        use:false,
        ok:true,
        id:1,
        seen:true,
        bind:"绑定数据",
        type:'c',
        sites: [
          { name: 'for1' },
          { name: 'for2' },
          { name: 'for3' }
        ],
        object:{
          name:"objName",
          test:"objTest"
        },
        counter:1,
        checked:true,
        checkedNames:[],
        selected: '',
        parentMsg: Secondcomponent.data().child + "parentMsg",
        show:true,
        styleobj :{
          fontSize:'30px',
          color:'red'
        }
      }
    },
    // 定义一个混入对象
    created(){
       this.hide();
    },
    methods: {
      details:function () {
        return "This methods details:"+this.url;
      },
      hide:function () {
        console.info("11111")
      },
      reverseMessage: function () {
        this.bind = this.bind.split('').reverse().join('')
      }
    },
    //使用 methods 来替代 computed,效果上两个都是一样的,但是 computed 是基于它的依赖缓存,只有相关依赖发生改变时才会重新取值。
    // 而使用 methods ,在重新渲染的时候,函数总会重新调用执行。
    computed:{

    },

}
</script>

<style scoped>

</style>




<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
    <h2>Essential Links</h2>
    <ul>
      <li>
        <a
          href="https://vuejs.org"
          target="_blank"
        >
          Core Docs
        </a>
      </li>
      <li>
        <a
          href="https://forum.vuejs.org"
          target="_blank"
        >
          Forum
        </a>
      </li>
      <li>
        <a
          href="https://chat.vuejs.org"
          target="_blank"
        >
          Community Chat
        </a>
      </li>
      <li>
        <a
          href="https://twitter.com/vuejs"
          target="_blank"
        >
          Twitter
        </a>
      </li>
      <br>
      <li>
        <a
          href="http://vuejs-templates.github.io/webpack/"
          target="_blank"
        >
          Docs for This Template
        </a>
      </li>
    </ul>
    <h2>Ecosystem</h2>
    <ul>
      <li>
        <a
          href="http://router.vuejs.org/"
          target="_blank"
        >
          vue-router
        </a>
      </li>
      <li>
        <a
          href="http://vuex.vuejs.org/"
          target="_blank"
        >
          vuex
        </a>
      </li>
      <li>
        <a
          href="http://vue-loader.vuejs.org/"
          target="_blank"
        >
          vue-loader
        </a>
      </li>
      <li>
        <a
          href="https://github.com/vuejs/awesome-vue"
          target="_blank"
        >
          awesome-vue
        </a>
      </li>
    </ul>
  </div>
</template>



<script>
export default {
  name: 'HelloWorld',
  data () {
    return {
      msg: 'Welcome to Your Vue.js App chenshuo'
    }
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h1, h2 {
  font-weight: normal;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}
</style>


secondcomponent.vue

<template>
  <p>secondcomponent:{{child}}</p>
</template>

<script>
  export default {
    name: "secondcomponent",
    template: '<h1>自定义组件!</h1>',
    data(){
      return {
        child:"child msg"
      }
    },
    props: {
      // 基础的类型检查 (`null` 和 `undefined` 会通过任何类型验证)
      propA: Number,
      // 多个可能的类型
      propB: [String, Number],
      // 必填的字符串
      propC: {
        type: String,
        // required: true
      },
      // 带有默认值的数字
      propD: {
        type: Number,
        default: 100
      },
      // 带有默认值的对象
      propE: {
        type: Object,
        // 对象或数组默认值必须从一个工厂函数获取
        default: function () {
          return { message: 'hello' }
        }
      },
      // 自定义验证函数
      propF: {
        validator: function (value) {
          // 这个值必须匹配下列字符串中的一个
          return ['success', 'warning', 'danger'].indexOf(value) !== -1
        }
      }
    }
  }
</script>


<style scoped>
</style>



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章