>首页> IT >

环球短讯!vue数据双向绑定与vue.config.js文件配置详解

时间:2022-08-09 16:52:55       来源:转载
本篇文章给大家带来了关于vue的相关知识,其中主要介绍了关于数据双向绑定以及vue.config.js文件配置的相关内容,Vue 内部通过 Object.defineProperty 方法属性拦截的方式,把 data 对象里每个数据的读写转化成 getter/setter,下面一起来看一下,希望对大家有帮助。


(资料图)

【相关推荐:javascript视频教程、web前端】

Vue 数据双向绑定原理

Vue 内部通过 Object.defineProperty 方法属性拦截的方式,把 data 对象里每个数据的读写转化成 getter/setter,当数据变化时通知视图更新

MVVM数据的双向绑定

MVVM 数据的双向绑定主要是指,Model 数据变化 View 视图自动渲染展示;View 视图数据变化 Model 数据自动同步更新

Object.defineProperty()

定义

Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。 ------(引自MDN)

语法

Object.defineProperty(obj, prop, descriptor)

(1)参数

(2)返回值

被传递给函数的对象。

(3)属性描述符

Object.defineProperty() 为对象定义属性,分 数据描述符 和 存取描述符 ,两种形式不能混用。

数据描述符和存取描述符均具有以下可选键值:

4.简单实现案例

    

<script src="./vue.js"></script> <script> let app = document.getElementById("app") // 声明临时存储变量 let temp = "初始数据" // 数据监听对象 Object.defineProperty(window, "actual", { // 监听读取数据 get() { console.log("获取数据调用"); return temp }, // 监听修改数据 set(value) { console.log("修改数据调用"); temp = value bind(actual) // 数据一旦发生变化就重新渲染页面 } }) // vue 数据双向绑定 function bind(content) { app.innerHTML = content } bind(actual) </script>

vue.config.js配置项

vue-cli3 脚手架搭建完成后,项目目录中没有 vue.config.js 文件,需要手动创建

创建vue.config.js

vue.config.js(相当于之前的webpack.config.js) 是一个可选的配置文件,如果项目的 (和package.json同级的) 根目录中存在这个文件,那么它会被@vue/cli-service自动加载。你也可以使用package.json中的vue字段,但是注意这种写法需要你严格遵照 JSON 的格式来写。

在根目录中创建vue.config.js

vue.config.js配置

这个文件应该导出一个包含了选项的对象:

配置选项

publicPath

// 这里的webpack配置会和公共的webpack.config.js进行合并module.exports = {  // 执行 npm run build 统一配置文件路径(本地访问dist/index.html需"./")  publicPath: "./",}

把开发服务器架设在根路径,可以使用一个条件式的值:

// 这里的webpack配置会和公共的webpack.config.js进行合并module.exports = {  // NODE_ENV:Node.js 暴露给执行脚本的系统环境变量。通常用于确定在开发环境还是生产环境  publicPath: process.env.NODE_ENV === "production" ? "" : "/",}

outputDir

// 这里的webpack配置会和公共的webpack.config.js进行合并module.exports = {  // 执行 npm run build 统一配置文件路径(本地访问dist/index.html需"./")  // NODE_ENV:Node.js 暴露给执行脚本的系统环境变量。通常用于确定在开发环境还是生产环境  // publicPath: "/",  publicPath: process.env.NODE_ENV === "production" ? "" : "/",  outputDir: "dist", // 输出文件目录}

assetsDir

// 这里的webpack配置会和公共的webpack.config.js进行合并module.exports = {  // 执行 npm run build 统一配置文件路径(本地访问dist/index.html需"./")  // NODE_ENV:Node.js 暴露给执行脚本的系统环境变量。通常用于确定在开发环境还是生产环境  // publicPath: "/",  publicPath: process.env.NODE_ENV === "production" ? "" : "/",  outputDir: "dist", // 输出文件目录  assetsDir: "static", // 放置静态资源}

**注:**从生成的资源覆写 filename 或 chunkFilename 时,assetsDir会被忽略。

indexPath

// 这里的webpack配置会和公共的webpack.config.js进行合并module.exports = {  // 执行 npm run build 统一配置文件路径(本地访问dist/index.html需"./")  // NODE_ENV:Node.js 暴露给执行脚本的系统环境变量。通常用于确定在开发环境还是生产环境  // publicPath: "/",  publicPath: process.env.NODE_ENV === "production" ? "" : "/",  outputDir: "dist", // 输出文件目录  // assetsDir: "static", // 放置静态资源  // indexPath: "index.html", // 可以不设置一般会默认}

filenameHashing

// 这里的webpack配置会和公共的webpack.config.js进行合并module.exports = {  // 执行 npm run build 统一配置文件路径(本地访问dist/index.html需"./")  // NODE_ENV:Node.js 暴露给执行脚本的系统环境变量。通常用于确定在开发环境还是生产环境  // publicPath: "/",  publicPath: process.env.NODE_ENV === "production" ? "" : "/",  outputDir: "dist", // 输出文件目录  // assetsDir: "static", // 放置静态资源  // indexPath: "index.html", // 可以不设置一般会默认  // filenameHashing:true, // 文件命名}

pages

其值应该是一个对象,对象的 key 是入口的名字,value 是:

lintOnSave

// 这里的webpack配置会和公共的webpack.config.js进行合并module.exports = {  // 执行 npm run build 统一配置文件路径(本地访问dist/index.html需"./")  // NODE_ENV:Node.js 暴露给执行脚本的系统环境变量。通常用于确定在开发环境还是生产环境  // publicPath: "/",  publicPath: process.env.NODE_ENV === "production" ? "" : "/",  outputDir: "dist", // 输出文件目录  // assetsDir: "static", // 放置静态资源  // indexPath: "index.html", // 可以不设置一般会默认  // filenameHashing:true, // 文件命名  lintOnSave: false, //设置是否在开发环境下每次保存代码时都启用 eslint验证}

runtimeCompiler

// 这里的webpack配置会和公共的webpack.config.js进行合并module.exports = {  // 执行 npm run build 统一配置文件路径(本地访问dist/index.html需"./")  // NODE_ENV:Node.js 暴露给执行脚本的系统环境变量。通常用于确定在开发环境还是生产环境  // publicPath: "/",  publicPath: process.env.NODE_ENV === "production" ? "" : "/",  outputDir: "dist", // 输出文件目录  // assetsDir: "static", // 放置静态资源  // indexPath: "index.html", // 可以不设置一般会默认  // filenameHashing:true, // 文件命名  lintOnSave: false, //设置是否在开发环境下每次保存代码时都启用 eslint验证  // runtimeCompiler: false, // 是否使用带有浏览器内编译器的完整构建版本}

transpileDependencies

productionSourceMap

crossorigin

integrity


Webpack相关配置

configureWebpack

chainWebpack


Css相关配置

css: { // css相关配置    // 是否将组件中的 CSS 提取至一个独立的 CSS 文件中,生产环境下是 true,开发环境下是 false    extract: process.env.NODE_ENV === "production",    // 是否为 CSS 开启 source map。设置为 true 之后可能会影响构建的性能。    sourceMap: false,    // 启用 CSS modules for all css / pre-processor files.(预加载)    requireModuleExtension: true,    loaderOptions: {      sass: {        // data: `@import "@/assets/css/variables.scss";`      }    }  },

css.modules(===css.requireModuleExtension)

css.extract

css.sourceMap

css.loaderOptions

支持的 loader 有:


devServer

devServer.proxy

devServer: {    port: 2021, // 设置端口号    host: "10.32.120.69", // ip 本地    disableHostCheck: true, //是否关闭用于 DNS 重绑定的 HTTP 请求的 HOST 检查    hotOnly: false, // 热更新    https: false, // https:{type:Boolean}配置前缀    open: false, //配置自动启动浏览器    proxy: null,  //设置代理    // proxy: { //目的是解决跨域,若测试环境不需要跨域,则不需要进行该配置    //   "/api": { // 拦截以 /api 开头的url接口    //     target: "https://api.taobao.cn/", //目标接口域名    //     changeOrigin: true, //是否跨域    //     ws: true, //如果要代理 websockets,配置这个参数    //     secure: false, // 如果是https接口,需要配置这个参数    //     // 标识替换    //     // 原请求地址为 /api/getData 将"/api"替换""时,    //     // 代理后的请求地址为: http://xxx.xxx.xxx/getData    //     // 若替换为"/other",则代理后的请求地址为 http://xxx.xxx.xxx/other/getData     //     pathRewrite: { // 标识替换    //       "^/api": "/"   //重写接口 后台接口指向不统一  所以指向所有/    //       "^/api": "/api/mock"    //     }    //   }    // }  },

这里理解成用‘/api’代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用’https://api.taobao.cn/xxx/proxytime=2017-07-07 14:57:22’,直接写‘/api/xxx/proxytime=2017-07-07 14:57:22’即可

import axios from "axios"export default {  created() {    // 1. 代理成功    // https://api.taobao.cn/users/proxy 转换成 http://localhost:2021/api/users/proxy     axios.get("/api/users/proxy").then(res => { // /api 不能少      console.log(res)    })  }}

parallel

pwa 学习

pwa: {    // serviceWorker:false,    // 允许您从一个现有的service worker文件开始,并创建一个该文件的副本,并将“预缓存清单”注入其中。    // workboxPluginMode:"InjectManifest",    // workboxOptions: {    //   //swSrc: "./app/sw.js", /* Empty file. */    // },    iconPaths: {      favicon32: "favicon.ico",      favicon16: "favicon.ico",      appleTouchIcon: "favicon.ico",      maskIcon: "favicon.ico",      msTileImage: "favicon.ico"    }  }

pluginOptions


// 这里的webpack配置会和公共的webpack.config.js进行合并module.exports = {  // 执行 npm run build 统一配置文件路径(本地访问dist/index.html需"./")  // NODE_ENV:Node.js 暴露给执行脚本的系统环境变量。通常用于确定在开发环境还是生产环境  // publicPath: "/",  publicPath: process.env.NODE_ENV === "production" ? "" : "/",  outputDir: "dist", // 输出文件目录  // assetsDir: "static", // 放置静态资源  // indexPath: "index.html", // 可以不设置一般会默认  // filenameHashing:true, // 文件命名  lintOnSave: false, //设置是否在开发环境下每次保存代码时都启用 eslint验证  // runtimeCompiler: false, // 是否使用带有浏览器内编译器的完整构建版本  configureWebpack: { // 别名配置    resolve: {      alias: {        //"src": "@", 默认已配置        "assets": "@/assets",        "common": "@/common",        "components": "@/components",        "api": "@/api",        "views": "@/views",        "plugins": "@/plugins",        "utils": "@/utils",      }    }    // 使用前面可加~  },  productionSourceMap: false, //如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建  css: { // css相关配置    // 是否将组件中的 CSS 提取至一个独立的 CSS 文件中,生产环境下是 true,开发环境下是 false    extract: process.env.NODE_ENV === "production",    // 是否为 CSS 开启 source map。设置为 true 之后可能会影响构建的性能。    sourceMap: false,    // 启用 CSS modules for all css / pre-processor files.(预加载)    requireModuleExtension: true,    loaderOptions: {      sass: {        // data: `@import "@/assets/css/variables.scss";`      }    }  },  devServer: {    port: 2021, // 设置端口号    host: "10.32.120.69", // ip    disableHostCheck: true, //是否关闭用于 DNS 重绑定的 HTTP 请求的 HOST 检查    hotOnly: false, // 热更新    https: false, // https:{type:Boolean}配置前缀    open: false, //配置自动启动浏览器    proxy: null,  //设置代理    // proxy: { //目的是解决跨域,若测试环境不需要跨域,则不需要进行该配置    //   "/api": { // 拦截以 /api 开头的url接口    //     target: "https://api.taobao.cn/", //目标接口域名    //     changeOrigin: true, //是否跨域    //     ws: true, //如果要代理 websockets,配置这个参数    //     secure: false, // 如果是https接口,需要配置这个参数    //     // 标识替换    //     // 原请求地址为 /api/getData 将"/api"替换""时,    //     // 代理后的请求地址为: http://xxx.xxx.xxx/getData    //     // 若替换为"/other",则代理后的请求地址为 http://xxx.xxx.xxx/other/getData     //     pathRewrite: { // 标识替换    //       "^/api": "/"   //重写接口 后台接口指向不统一  所以指向所有/    //       "^/api": "/api/mock"    //     }    //   }    // }  },  // 这个插件中添加的service worker只在生产环境中启用(例如,只有当你运行npm run build或yarn build时)。  // 不推荐在开发模式中启用service worker,因为它会导致使用以前缓存的资产而不包括最新的本地更改的情况。  pwa: {    // serviceWorker:false,    // 允许您从一个现有的service worker文件开始,并创建一个该文件的副本,并将“预缓存清单”注入其中。    // workboxPluginMode:"InjectManifest",    // workboxOptions: {    //   //swSrc: "./app/sw.js", /* Empty file. */    // },    iconPaths: {      favicon32: "favicon.ico",      favicon16: "favicon.ico",      appleTouchIcon: "favicon.ico",      maskIcon: "favicon.ico",      msTileImage: "favicon.ico"    }  }}

【相关推荐:javascript视频教程、web前端】

以上就是vue数据双向绑定与vue.config.js文件配置详解的详细内容,更多请关注php中文网其它相关文章!

关键词: 生产环境 开发环境 配置文件