Feathers
2019-08-04 11:18
<template> <div :class="['todo-item',todo.completed ? 'completed' :'' ]"> <input type="checkbox" class="toggle" v-model="todo.completed" > <label> {{todo.content}}</label> <button class="destroy" @click="deletetodo"> </button> </div> </template> <script> export default { props: { todo: { type: Object, required: true } }, methods : { deletetodo(){ this.$emit("del",this.todo.id); } } } </script> <style lang="stylus" scoped> .todo-item position relative background #ffffff font-size 24px border-bottom 1px solid rgba(0,0,0,.06) &:hover .destroy:after { content: 'x' } label white-space pre-line word-break break-all padding 15px 60px 15px 15px margin-left 45px display block line-height 1.2 transition color 0.4s &.completed{ label color #d9d9d9 text-decoration line-through } .toggle{ text-align center width 400px height 40px position absolute top 0 bottom 0 margin auto 0 border none outline none appearance none } .toggle:before{ content:url('../assets/images/round.png') position absolute left 12px cursor pointer } .toggle:checked:before{ content : url('../assets/images/done.png') position absolute left 12px cursor pointer } .destroy position absolute top 50% right 10px bottom 0; width 40px height 40px margin auto 0; font-size 30px color #cc9a9a; margin-bottom 11px transition: color 0.2s east-out background-color transparent appearance none border-width 0 cursor pointer outline none </style>
{ "name": "todo", "version": "1.0.0", "description": "vue+webpack示例项目", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "build": "cross-env NODE_ENV=dev webpack --config webpack.config.js", "dev": "cross-env NODE_ENV=dev webpack-dev-server --config webpack.config.js" }, "author": "yangsx95", "license": "ISC", "dependencies": { "autoprefixer": "^9.6.1", "babel-core": "^6.26.3", "babel-helper-vue-jsx-merge-props": "^2.0.3", "babel-plugin-syntax-jsx": "^6.18.0", "babel-plugin-transform-vue-jsx": "^3.7.0", "babel-preset-env": "^1.7.0", "cross-env": "^5.2.0", "css-loader": "^3.1.0", "file-loader": "^4.1.0", "html-webpack-plugin": "^3.2.0", "postcss-loader": "^3.0.0", "style-loader": "^0.23.1", "stylus": "^0.54.5", "stylus-loader": "^3.0.2", "url-loader": "^2.1.0", "vue": "^2.6.10", "vue-loader": "^15.7.1", "vue-template-compiler": "^2.6.10", "webpack-dev-server": "^3.7.2" }, "devDependencies": { "@babel/core": "^7.5.5", "@babel/preset-env": "^7.5.5", "babel-loader": "^8.0.6", "webpack": "^4.39.1", "webpack-cli": "^3.3.6" } }
// webpack 用于打包项目, 得到可以直接在浏览器打开的代码 const webpack = require('webpack'); // webpack const path = require('path'); // nodejs path模块用于获取绝对路径 const VueLoaderPlugin = require('vue-loader/lib/plugin'); // vueLoader插件,用于加载解析vue资源 const isDev = process.env.NODE_ENV === 'dev'; // 是否是开发环境,开发环境会多出部分配置 const HTMLPlugin = require('html-webpack-plugin'); const config = { target: 'web', // 设置webpack编译目标为web平台,webpack-dev-server配置必须配置此项 entry: path.join(__dirname, 'src/index.js'), // 定义入口文件 output: { filename: 'bundle.js', // 输出为bundle.js path: path.join(__dirname, 'dist') // 输出路径为 dist文件夹下 }, plugins: [ new VueLoaderPlugin(), // 依赖vueLoader插件 new webpack.DefinePlugin({ // 用于设定环境变量 'process.env': { NODE_ENV: isDev ? '"dev"' : '"product"' // 注意要加双引号 } }), new HTMLPlugin(), // 依赖html-webpack-plugin,此插件会给项目添加一个html入口页面 ], module: { // 用于定义模块规则 rules: [ { test: /\.vue$/, // vue结尾的文件,使用vue-loader模块加载器加载 loader: 'vue-loader' }, { test: /\.jsx$/, // jsx 文件采用babel-loader操作 loader: 'babel-loader' }, { test: /\.css$/, // css结尾的文件,使用style-loader,css-loader模块加载器加载 use: ['vue-style-loader', 'css-loader', 'postcss-loader'] // use可以接受数组,使用多个loader }, { test: /\.styl/, use: [ 'style-loader', 'css-loader', { loader: 'postcss-loader', options: { sourceMap: true } }, 'stylus-loader' ] }, { test: /\.(gif|jpg|jpeg|png|svg)$/, use: [ // 不传入string,而传入对象,对象可以加入配置信息 { loader: 'url-loader', // 针对file-loader的封装,将图片/文件转换为base64文本,放入到js文件中 options: { limit: 1024, // 用于限定文件大小 name: '[name].[ext]' // 文件名规则定义 } } ] } ] } }; // 如果是dev环境,就进行webpack-dev-server配置 if (isDev) { config.devtool = '#cheap-module-eval-source-map'; // 转换后的代码(仅限行) config.devServer = { port: 8000, host: '0.0.0.0', overlay: { errors: true // 展示错误到控制台 }, // open: true, // 启动后打开浏览器页面 hot: true, // 热模块更换开关——改组件,此组件会被单独刷新,不会刷新整个页面 }; config.plugins.push( new webpack.HotModuleReplacementPlugin(), // 启用热模块更换 new webpack.NoEmitOnErrorsPlugin(), // webpack 进程遇到错误代码将不会退出 ); } module.exports = config;
你可以参考一下我的代码https://github.com/carrieguo/vue.js-todolist
报什么错?
求助!
Vue+Webpack打造todo应用
84606 学习 · 787 问题
相似问题