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全家桶开发笔记的更多相关文章

  1. 基于Vue全家桶开发的前端组件管理平台

    项目背景 项目背景是外包类建站公司里,设计环节沉淀了大量可复用组件,设计师往往只需要微调组件就拼凑出页面,交付给前端,理论上这些组件在前端也可以复用,但实际上前端每次都要重新实现整个页面,浪费很多人力 ...

  2. Vue全家桶高仿小米商城

    大家好,我是河畔一角,时隔半年再次给大家带来一门重量级的实战课程:<Vue全家桶高仿小米商城>,现在很多公司都在参与到商城的构建体系当中,因此掌握一套商城的标准开发体系非常重要:商城的开始 ...

  3. 【实战】Vue全家桶(vue + axios + vue-router + vuex)搭建移动端H5项目

    使用Vue全家桶开发移动端页面. 本博文默认已安装node.js. github链接 一.准备工作 安装vue npm install vue 安装脚手架vue-cli npm install -g ...

  4. 用 Vue 全家桶二次开发 V2EX 社区

    一.开发背景 为了全面的熟悉Vue+Vue-router+Vuex+axios技术栈,结合V2EX的开放API开发了这个简洁版的V2EX. 在线预览 (为了实现跨域,直接npm run dev部署的, ...

  5. Vue 全家桶 + Electron 开发的一个跨三端的应用

    代码地址如下:http://www.demodashi.com/demo/11738.html GitHub Repo:vue-objccn Follow: halfrost · GitHub 利用 ...

  6. [在线+源码]vue全家桶+Typescript开发一款习惯养成APP

    # vue-ts-daily 基于Vue.js的2.5.13版本和TypeScript编写的模仿原生应用的WebApp. [源码地址](https://github.com/xiaomuzhu/vue ...

  7. Vue全家桶之组件化开发

    Vue全家桶之组件化开发   一.组件 组件 (Component) 是 Vue.js 最强大的功能之一 组件可以扩展 HTML 元素,封装可重用的代码   二. 组件注册 2.1 全局注册 Vue. ...

  8. Vue全家桶

    简介 “简单却不失优雅,小巧而不乏大匠”. Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架.它是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计. 为什么 ...

  9. 使用vue全家桶制作博客网站

    前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用vue全家桶制作的博客网站 概述 该项目是基于vue全家桶(vue.vue-router.vuex.v ...

随机推荐

  1. 使用geolocation

    The geolocation object geolocation API建立在navigator.geolocation 上. 如果对象存在,才可以使用定位服务. if ("geoloc ...

  2. Linux GCC常用命令学习

    1简介 GCC 的意思也只是 GNU C Compiler 而已.经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言:它现在还支持 Ada 语言.C++ 语言.Java 语言.Objective ...

  3. Opencv— — Color Gradient

    // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...

  4. 51Nod - 1821:最优集合 (求第一个不能被表示为多个数的和的数)(不错的动脑题)

    一个集合S的优美值定义为:最大的x,满足对于任意i∈1,x1,x,都存在一个S的子集S',使得S'中元素之和为i. 给定n个集合,对于每一次询问,指定一个集合S1和一个集合S2,以及一个数k,要求选择 ...

  5. SQL.py

    import sqlite3,sys def convert(value): if value.startswith('~'): return value.strip('~') if not valu ...

  6. 三剑客之awk数组实战

    shell数组for循环 第一种: #!/bin/sh array=(1 2 3) for i in ${array[*]}  do    echo $i done   第二种: #!/bin/sh ...

  7. python程序的pypy加速

    我们知道,python作为一种几乎是脚本语言的语言,其优点固然有,但是其有一个最大的缺点,就是运行速度没有办法和c,c++,java比.最近在些一些代码的时候也是碰到了这样的问题. 具体而言,pyth ...

  8. su命令,sudo命令,visudo命令

    一.命令su 语法 : su [-] username后面可以跟 ‘-‘ 也可以不跟,普通用户su不加username时就是切换到root用户,当然root用户同样可以su到普通用户. ‘-‘ 这个字 ...

  9. CPU、内存、硬盘分区的检测.py

    cpu_mem_directories.py   CPU.内存.硬盘分区的检测 #!/usr/bin/env python #coding:utf-8 import psutil import tim ...

  10. PHP开发api接口 -- 安全验证 生成签名

    转载博客 ————. http://blog.csdn.net/li741350149/article/details/62887524 REST模式中HTTP请求方法(GET,POST,PUT,DE ...