Vue全家桶开发笔记
state 中没有属性的情况下,新增属性不会触发mutations修改。
例:
commit('change', {
c: 3,
d: 4,
});
state: {
test: {
a: 1,
b: 2,
}
},
mutations: {
change(state, payload) {
state.test.c = payload.c; // 直接新增属性不会触发
state.test = Object.assign(state.test, payload); // 浅拷贝不会触发
}
}
解决方案
state.test = { state.test, ...payload };
vue-cli打包后,css里的背景图片无法找到资源
解决方法:
https://github.com/vuejs/vue-cli/issues/179
@margox
在build目录下新建一个cssPathResolver.js,内容如下:
module.exports = function (source) {
if (process.env.NODE_ENV === 'production') {
return source.replace('__webpack_public_path__ + "static', '"..')
} else {
return source
}
}
webpack.base.conf.js里的img部分改为
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loaders: [
{
loader: path.resolve(__dirname, 'cssPathResolver')
},
{
loader: 'url-loader',
query: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
},
},
],
},
build后图片加载是相对路径,无法找到图片
图片大小大于10K。
在build文件夹webpack.base.conf.js修改url-loader的limit。
{
loader: 'url-loader',
query: {
limit: 150000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
},
}
或者可在src文件夹同级的目录建立static
<img src='static/xxxx.jpg'>
给v-for遍历产生的元素绑定事件,并动态添加style。
例:
<ul v-for='result of results'>
<li>
<div class='cut'>
<img :src='result.src'>
</div>
</li>
</ul>
当图片加载时,记录当前图片原始宽高,处理后传值给style。
首先需求是,在加载图片时记录当前图片原始宽高,所以img标签需要加上@load绑定onload事件。
<ul v-for='result of results'>
<li>
<div class='cut'>
<img @load='load' :src='result.src'>
</div>
</li>
</ul> <script>
export default {
data() {
results: [
{ src: 'src', style: null },
{ src: 'src', style: null },
{ src: 'src', style: null },
],
},
methods: {
load(e) {
const img = e.target;
const [naturalWidth, naturalHeight] = getNatural(img); function getNatural(img) {
let nWidth;
let nHeight;
if (img.naturalWidth) {
nWidth = img.naturalWidth;
nHeight = img.naturalHeight;
}
//省略兼容html 4
return [nWidth, nHeight];
}
},
},
};
</script>
问题来了,这时候load方法虽然获取到了图片的原始宽高,但是传值给style则是个问题。如果要传当前元素的宽高,则需要在模板部分修改:
<img @load='load(result)' :src='result.src'>
这时传的值result会覆盖了event事件。导致load方法出错。
如果需要传event事件需要改成这样:
<img @load='load(result, $event)' :src='result.src'>
load方法就能同时接受当前遍历对象及触发事件。
ps:methods里面的方法有个默认声明的对象event,里面的属性和$event传过来的一样,但是官方文档没写,不建议使用。
此时在load方法里添加处理style的逻辑:
methods: {
load(item, e) {
const img = e.target;
const [naturalWidth, naturalHeight] = getNatural(img);
//省略函数
if (naturalWidth >= narturalHeight) {
margin = ((naturalWidth * 100) / narturalHeight) / 2;
item.style = { marginLeft: `-${margin}px`, height: '100px' };
} else {
item.style = { marginLeft: 'margin-left: -60px', height: '100px' };
}
},
},
这里也要注意style是个对象。同时,属性的值不能有分号,否则不会渲染style。
Vue全家桶开发笔记的更多相关文章
- 基于Vue全家桶开发的前端组件管理平台
项目背景 项目背景是外包类建站公司里,设计环节沉淀了大量可复用组件,设计师往往只需要微调组件就拼凑出页面,交付给前端,理论上这些组件在前端也可以复用,但实际上前端每次都要重新实现整个页面,浪费很多人力 ...
- Vue全家桶高仿小米商城
大家好,我是河畔一角,时隔半年再次给大家带来一门重量级的实战课程:<Vue全家桶高仿小米商城>,现在很多公司都在参与到商城的构建体系当中,因此掌握一套商城的标准开发体系非常重要:商城的开始 ...
- 【实战】Vue全家桶(vue + axios + vue-router + vuex)搭建移动端H5项目
使用Vue全家桶开发移动端页面. 本博文默认已安装node.js. github链接 一.准备工作 安装vue npm install vue 安装脚手架vue-cli npm install -g ...
- 用 Vue 全家桶二次开发 V2EX 社区
一.开发背景 为了全面的熟悉Vue+Vue-router+Vuex+axios技术栈,结合V2EX的开放API开发了这个简洁版的V2EX. 在线预览 (为了实现跨域,直接npm run dev部署的, ...
- Vue 全家桶 + Electron 开发的一个跨三端的应用
代码地址如下:http://www.demodashi.com/demo/11738.html GitHub Repo:vue-objccn Follow: halfrost · GitHub 利用 ...
- [在线+源码]vue全家桶+Typescript开发一款习惯养成APP
# vue-ts-daily 基于Vue.js的2.5.13版本和TypeScript编写的模仿原生应用的WebApp. [源码地址](https://github.com/xiaomuzhu/vue ...
- Vue全家桶之组件化开发
Vue全家桶之组件化开发 一.组件 组件 (Component) 是 Vue.js 最强大的功能之一 组件可以扩展 HTML 元素,封装可重用的代码 二. 组件注册 2.1 全局注册 Vue. ...
- Vue全家桶
简介 “简单却不失优雅,小巧而不乏大匠”. Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架.它是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计. 为什么 ...
- 使用vue全家桶制作博客网站
前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用vue全家桶制作的博客网站 概述 该项目是基于vue全家桶(vue.vue-router.vuex.v ...
随机推荐
- HTML标题和段落
HTML标题 通过<h1> - <h6> 等标签进行定义 <h1>一标题</h1> <h2>二标题</h2> <h3> ...
- 中缀表达式std
#include<cstdio>#include<cstdlib>#include<string>#include<cstring>using name ...
- 4.java变量
1.java中如何定义变量的语言 数据类型 变量名:2.如何给变量赋值 语言 变量名=值:3.变量本质是什么. 本质就是内存中的一块空间,这块空间有‘类型’.“名字”.“值” int a;//在内存中 ...
- vs2012安装程序,无法注册ActiveX
最近开发环境换成了vs2012,用C#写了一个ActiveX插件程序,然后添加一个安装程序,但是安装后,ie无法识别AcitveX,在ie的Manage add-ons中也找不到,这在vs2010是没 ...
- cf 424
Office Keys 首先显然有随人位置的递增,钥匙的位置也要递增,这样考虑两张做法: 1.$f(i,j)$ 表示前i个人,钥匙到第j个最少用的最大时间,然后$O(nK)$ dp 2.二分时间,对于 ...
- 前端学习之——js解析json数组
** 前端学习之——js解析json数组** 解析json数组即对JSONArray的遍历 一.对于标准的json数组如: var result=[{"flag":1," ...
- HDOJ-1412(set)
{A} + {B} Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- Java简单的数组用法尝试,和C语言很不一样
public class Main { static int ARRY_LONGTH=100; static int[] getRandomArr(int n){ int[] randomArr; r ...
- Lightoj1084【DP啊DP】
题意: 给你n个人的位置,每个人最多移动k个单位,然后在某点>=3人可以抱团,问你这n个人最少抱团数,只要有一个n不能抱团输出-1: 思路: 感觉又是超级超级狗血.... 剪不断,理还乱... ...
- Java内存模型(Java Memory Model,JMM)
今天简单聊聊什么叫做 Java 内存模型,不是 JVM 内存结构哦. JMM 是一个语言级别的内存模型,处理器的硬件模型是硬件级别,Java中的内存模型是内存可见性的基本保证.从而为我们 volati ...