您的位置:首页 > 产品设计 > UI/UE

vue入门学习笔记

2017-03-02 11:20 477 查看
1、看官方挨批文档,安装相应工具

cnpm install vue //安装vue包

cnpm
install --global vue-cli //安装cli编译工具

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

vue init webpack my-project (vue init webpack-simple my-project 初学者建议使用这个初始构建项目,本文所讲例子是基于webpack-simple构建的)$ cd my-project$ cnpm install$ npm run dev (开发环境下运行项目,会在浏览器打开)npm run build (打包编译正式环境下面的文件,会在项目文件夹下面生成index.html,dist文件夹,dist文件夹下面有静态资源和build.js文件。直接拷贝这些文件到你的web服务器,然后在web服务器访问index.html,即可看到开发调试看到的界面)

3、创建组件

在工程目录 /src 下创建 component 文件夹,并在 component 文件夹下创建一个 firstcomponent.vue 并写仿照 App.vue 的格式和前面学到的知识写一个组件。
<template>
<div id="firstcomponent">
<h1>I am a title.</h1>
<a> written by {{ author }} </a>
</div>
</template>

<script type="text/javascript">
export default {
data () {
return {
author: "刘小强,qq号 940235644"
}
}
}
</script>

<style>
</style>

4、在 App.vue 使用组件 ( 因为在 index.html 里面定义了<div id="app"></div>所以就以这个组件作为主入口,你可以自己尝试改写)

第一步,在App.vue引入。在 <script></script> 标签内的第一行写
import firstcomponent from './component/firstcomponent.vue'


第二步,在App.vue注册。在 <script></script> 标签内的 data 代码块后面加上 components:
{ firstcomponent }。这里要注意:如果你还有其他组件要使用,必须和firstcomponent一样在App.vue里面引入和注册components:
{ firstcomponent ,secondcomponent}
export default {
data () {
return {
msg: 'Hello Vue!'
}
},
components: { firstcomponent }
}


第三步,使用。

在 <template></template> 内加上<firstcomponent></firstcomponent>
<template>
<div id="app">
<img src="./assets/logo.png">
<h1>{{ msg }}</h1>
<firstcomponent></firstcomponent>
</div>
</template>
完成后的代码ru

<template>
<div id="app">
<img src="./assets/logo.png">
<h1>{{ msg }}</h1>
<firstcomponent></firstcomponent>
<secondcomponent></secondcomponent>
<ul>
<li><router-link to="/first">第一页</router-link></li>
<li><router-link to="/second">第二页</router-link></li>
</ul>
<router-view class="view"></router-view>
</div>
</template>

<script>
import firstcomponent from './component/firstcomponent.vue';
import secondcomponent from './component/secondcomponent.vue';
export default {
name: 'app',
data () {
return {
msg: 'Welcome to Your Vue.js App'
}
},
components: { firstcomponent,secondcomponent }
}
</script>

<style lang="scss">
#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;
}

h1, h2 {
font-weight: normal;
}

ul {
list-style-type: none;
padding: 0;
}

li {
display: inline-block;
margin: 0 10px;
}

a {
color: #42b983;
}
</style>
5、使用路由搭建单页应用
cnpm install vue-router --save在 webpack.config.js 加入别名,因为默认配置是运行时构建(构建方式有两种:独立构建和运行时构建,具体可以参考官方文档说明)resolve: {
alias: {vue: 'vue/dist/vue.js'}
}再按之前的方法写一个组件 secondcomponent.vue

然后修改 main.js,引入并注册 vue-router
import VueRouter from "vue-router";
Vue.use(VueRouter);并且配置路由规则和 app 启动配置项加上 router,修改后的 main.js 如下:
import Vue from 'vue'
import App from './App.vue'
import VueRouter from "vue-router";
import VueResource from 'vue-resource';
import secondcomponent from './component/secondcomponent.vue';
import Element from 'element-ui';
import 'element-ui/lib/theme-default/index.css';
Vue.use(Element);
//开启debug模式
Vue.config.debug = true;

Vue.use(VueRouter);
Vue.use(VueResource);
// 定义组件, 也可以像教程之前教的方法从别的文件引入
const First = { template: '<div><h2>我是第 1 个子页面</h2></div>' }
// 创建一个路由器实例
// 并且配置路由规则
const router = new VueRouter({
    mode: 'history',
    base: __dirname,
    routes: [
        {
            path: '/first',
            component: First
        },
        {
            path: '/second',
            component: secondcomponent
        }
    ]
})

// 现在我们可以启动应用了!
// 路由器会创建一个 App 实例,并且挂载到选择符 #app 匹配的元素上。
const app = new Vue({
        router: router,
        render: h => h(App)
}).$mount('#app')

6、给页面加动态数据
这时候的页面都是静态的(数据在写程序的时候已经固定了不能修改),而每个应用基本上都会请求外部数据以动态改变页面内容。对应有一个库叫 vue-resource 帮我们解决这个问题。使用命令行安装cnpm install vue-resource --save在 main.js 引入并注册 vue-resource :import VueResource from 'vue-resource'
Vue.use(VueResource);

我们在 secondcomponent.vue 上来动态加载数据

添加一个列表:
<ul>
<li v-for="article in articles">
{{article.title}}
</li>
</ul>


在 data 里面加入数组 articles 并赋值为[]

然后在 data 后面加入加入钩子函数 mounted (详细请参照官方文档关于 vue 生命周期的解析),data 和 mount 中间记得记得加逗号
mounted: function() {
this.$http.jsonp('https://api.douban.com/v2/movie/top250?count=10', {}, {
headers: {

},
emulateJSON: true
}).then(function(response) {
// 这里是处理正确的回调

this.articles = response.data.subjects
// this.articles = response.data["subjects"] 也可以

}, function(response) {
// 这里是处理错误的回调
console.log(response)
});
}

7、添加样式美化页面命令行安装 ElementU

cnpm install element-ui@next -S

然后在 main.js 引入并注册
import Element from 'element-ui'
import 'element-ui/lib/theme-default/index.css'
Vue.use(Element)


下面三个加载器必须安装

cnpm install style-loader --save-dev

cnpm install css-loader --save-dev

cnpm install file-loader --save-dev

在 webpack.config.js 中的 loaders 数组加入以下配置, 记得该加逗号的地方加逗号!
{
test: /\\.css$/,
loader: "style!css"
},
{
test: /\\.(eot|woff|woff2|ttf)([\\?]?.*)$/,
loader: "file"
}

修改完的 webpack.config.js 如下

var path = require('path')

var webpack = require('webpack')

module.exports = {

  entry: './src/main.js',

  output: {

    path: path.resolve(__dirname, './dist'),

    publicPath: '/dist/',

    filename: 'build.js'

  },

  module: {

    rules: [

      {

        test: /\.vue$/,

        loader: 'vue-loader',

        options: {

          loaders: {

            // Since sass-loader (weirdly) has SCSS as its default parse mode, we map

            // the "scss" and "sass" values for the lang attribute to the right configs here.

            // other preprocessors should work out of the box, no loader config like this necessary.

            'scss': 'vue-style-loader!css-loader!sass-loader',

            'sass': 'vue-style-loader!css-loader!sass-loader?indentedSyntax'

          }

          // other vue-loader options go here

        }

      },

      {

        test: /\.js$/,

        loader: 'babel-loader',

        exclude: /node_modules/

      },

      {

        test: /\.(png|jpg|gif|svg)$/,

        loader: 'file-loader',

        options: {

          name: '[name].[ext]?[hash]'

        }

      },

 {

        test: /\.css$/,

        loader: "style-loader!css-loader"

      },

      {

        test: /\.(eot|woff|woff2|ttf)([\\?]?.*)$/,

        loader: "file-loader"

       }

    ]

  },

  resolve: {

    alias: {

     // 'vue$': 'vue/dist/vue.esm.js',

        vue: 'vue/dist/vue.js'

    }

  },

  devServer: {

    historyApiFallback: true,

    noInfo: true

  },

  performance: {

    hints: false

  },

  devtool: '#eval-source-map'

}

if (process.env.NODE_ENV === 'production') {

  module.exports.devtool = '#source-map'

  // http://vue-loader.vuejs.org/en/workflow/production.html
  module.exports.plugins = (module.exports.plugins || []).concat([

    new webpack.DefinePlugin({

      'process.env': {

        NODE_ENV: '"production"'

      }

    }),

    new webpack.optimize.UglifyJsPlugin({

      sourceMap: true,//不生成源码映射

      compress: {

        warnings: false

      }

    }),

    new webpack.LoaderOptionsPlugin({

      minimize: true

    })

  ])

}

给豆瓣的电影列表套个衣服(样式) :
<el-card class="box-card">
<div slot="header" class="clearfix">
<h1 style="line-height: 36px; color: #20A0FF">豆瓣电影排行榜</h2>
</div>
<div v-for="article in articles" class="text item">
{{article.title}}
</div>
</el-card>


编译

npm run build






                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: