当前位置: 首页 > news >正文

Vue2-基础使用模板

data和el的第一种写法

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>VUE</title><script type="text/javascript" src="../js/vue.js"></script>
</head>
<body><div id="root">你好:{{name}},{{address}}</div><script type="text/javascript">new Vue({el:"#root",data(){return {name: "马朋帅",address:"唐县"}}})</script>
</body>
</html>

data和el的第二种写法

// 第一种
new Vue({el:"#root"
})
// el第二种和data的第二种(data必须用第二种)
let v =  new Vue({data(){return {name: "马朋帅"}}
})
v.$mount('root')

methods

<script>
new Vue({methods:{open1(){console.log("v-on");},open2(){console.log("@");}}
})
</script>

computed

注意:计算方法里面用到的任何一个date里面的数据发生变化,方法都会重新计算一遍

<div>{{aaa}}</div>
<script>
new Vue({data(){return {name: "马朋帅",age:"23"}}computed:{// 简写aaa(){return this.name+this.age;  //name和age任何一个改变aaa()都会重新执行一遍}}
})
</script>

正确写法,不加括号:{{aaa}},错误写法:{{aaa()}}

<div>{{aaa}}</div>
<script>
new Vue({data(){return {name: "马朋帅",age:"23"}}computed:{// 完整写法aaa:{get(){return this.name+age;},set(value){this.name = value;}}}
})
</script>

{{aaa}} 解析时会调用 get()方法

this.aaa = “mps” ,设置他的值时会调用set(value)方法,参数 value就是 “mps”

watch

简写

<body>
<div id="root"><button @click="num++">按钮</button>
</div>
<script type="text/javascript">new Vue({el: "#root",data() {return {num: 1}},watch: {num(newValue,oldValue) {console.log(newValue,oldValue)}}})
</script>
</body>

另一种写法

<body>
<div id="root"><button @click="num++">按钮</button>
</div>
<script type="text/javascript">const vm = new Vue({el: "#root",data() {return {num: 1}}})vm.$watch('num',function (newValue,oldValue){console.log(newValue,oldValue)})
</script>
</body>

监视data里面的值

<body><div id="root"><button @click="num++">按钮</button></div><script type="text/javascript">new Vue({el:"#root",data(){return {num:1}},watch:{num:{ // 监视num变量handler(newValue,oldValue){console.log(newValue,oldValue)}}}})</script>
</body>

监视computed

(里面的函数)

<body><div id="root"><button @click="num++">按钮</button></div><script type="text/javascript">new Vue({el:"#root",data(){return {num:1}},computed:{aaa(){return this.num;}},watch:{aaa:{handler(newValue,oldValue){console.log(newValue,oldValue)}}}})</script>
</body>

初始化时执行一次

<body><div id="root"><button @click="num++">按钮</button></div><script type="text/javascript">const vm = new Vue({el:"#root",data(){return {num:1}},watch:{num:{ 										immediate:true, // 初始化时就调用一次handler函数handler(newValue,oldValue){console.log(newValue,oldValue)}}}})// 另一种写法vm.$watch('num',{immediate:true,handler(newValue,oldValue){console.log(newValue,oldValue)}})</script>
</body>

深度监视普通写法

(‘obj.a’)a属性改变时触发handler()

<body><div id="root"><button @click="obj.a++">a++</button></div><script type="text/javascript">const vm = new Vue({el:"#root",data(){return {obj:{a:1}}},watch:{'obj.a':{handler(){console.log("a改变了")}}}})</script>
</body>

深度监视正确写法

(deep:true)a,b改变都触发handler()

<body><div id="root"><button @click="obj.a++">a++</button><button @click="obj.b++">b++</button></div><script type="text/javascript">const vm = new Vue({el:"#root",data(){return {obj:{a:1,b:1}}},watch:{obj:{deep:true,handler(){console.log("obj改变了")}}}})</script>
</body>

过滤器filters

可以用在v-bind和 {{ }} 里面,用 | 分割

例:{{ message | filterA | filterB }} message为 filterA 的第一个参数,filterA 的结果为 filterB 的第一个参数

局部过滤器

<div id="root"><div v-bind:name="name | capitalize"></div><ul><li v-for="num of list ">{{num}}--{{num | capitalize1}}--{{num | capitalize2("a")}}--{{num | capitalize1 | capitalize2("a")}}</li></ul></div>
<script type="text/javascript">const vm = new Vue({el: "#root",data() {return {name : "张三",list:[0,1,2,3,4,5,6]}},filters: {capitalize(value){return value + '啊'},capitalize1(value){return value+10},capitalize2(value,str){return value+str}}})
</script>

全局过滤器

<script type="text/javascript">Vue.filter('capitalize', function (value) {return value+"全局过滤器"})new Vue({el: "#root",data() {return {}}})
</script>

脚手架后目录结构

.文件目录
├── node_modules 
├── public
│   ├── favicon.ico: 页签图标
│   └── index.html: 主页面
├── src
│   ├── assets: 存放静态资源
│   │   └── logo.png: 自己引入的图片
│   │── component: 存放组件
│   │	├── Student.vue: 自定义组件
│   │   └── School.vue: 自定义组件
│   │── App.vue: 汇总所有组件
│   └── main.js: 入口文件
├── .gitignore: git版本管制忽略的配置
├── babel.config.js: babel的配置文件
├── package.json: 应用包配置文件 
├── README.md: 应用描述文件
├── .eslintrc.js: 可以解决组件名语法错误问题(自己创建该文件)
├── vue.config.js: 自定义配置文件(上这儿配置东西)
└── package-lock.json: 包版本控制文件

几个主要文件

.eslintrc.js 文件(直接用)

module.exports = {root: true,env: {node: true},'extends': ['plugin:vue/essential','eslint:recommended'],parserOptions: {parser: '@babel/eslint-parser'},rules: {'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off','no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',//在rules中添加自定义规则//关闭组件命名规则"vue/multi-word-component-names":"off",},overrides: [{files: ['**/__tests__/*.{j,t}s?(x)','**/tests/unit/**/*.spec.{j,t}s?(x)'],env: {jest: true}}]
}

School.vue 组件

<template><div class="demo"><h2>学校名称:{{ name }}</h2><h2>学校地址:{{ address }}</h2><button @click="showName">点我提示学校名</button></div>
</template><script>
export default {name: 'School',data() {return {name: "马朋帅",address: "成都",};},methods: {showName() {alert(this.name);}},
};
</script><style>
.demo {background-color: orange;}
</style>

App.vue

<template>
<!-- template里面必须先包一个div --><div><School></School><Student></Student></div>
</template><script>
// 引入组件
import School from './components/School.vue'
import Student from './components/Student.vue'export default {name:'App',components:{ School, Student }
}
</script>

main.js

import Vue from 'vue'
import App from './App.vue'// 阻止启动时的生成提示
Vue.config.productionTip = falsenew Vue({render: h => h(App), // 作用:把App组件引入到index.html中id为#app的div里面
}).$mount('#app')

vue.config.js (可以继续添加新的配置)

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({transpileDependencies: true, //不用管默认就有lintOnSave: false // 关闭语法校验(自己配置)
})

相关文章:

  • 【SAM2代码解析】training部分-1总体概述
  • 实时监测+远程管控:ADW300解锁阳台光伏运维新维度
  • Java转Go日记(六):TCP黏包
  • 5个Go接口常见错误及避免方法
  • 初次尝试Ghidra
  • usb2.0的硬件知识(一)
  • 2023蓝帽杯初赛内存取证-3
  • 【Ansible】批量管理 Windows自动化运维
  • 设置开机自启动
  • Cursor 设置规则
  • 遨游通讯发布国产化旗舰三防手机AORO AU1:以自主可控重塑工业安全
  • Curl用法解析
  • 基于华为云 ModelArts 的在线服务应用开发(Requests 模块)
  • drupal7可以从测试环境一键部署到生产环境吗
  • Springboot+Vue实现邮箱验证功能(邮箱登录+忘记密码)
  • Docker 部署 PostgreSQL 数据库
  • 基于龙芯 2K1000处理器和复旦微 FPGA K7 的全国产RapidIO 解决方案研究
  • Maven插件学习(三)——插件配置依赖和执行目标
  • 代码随想录算法训练营Day34
  • 【Java面试笔记:基础】4.强引用、软引用、弱引用、幻象引用有什么区别?
  • 今天是世界读书日,上海准备了哪些文化大餐?
  • 上海34年“老外贸”张斌:穿越风暴,必须靠过硬的核心竞争力
  • 告别国泰海通,黄燕铭下一站将加盟东方证券,负责研究业务
  • 郑州卫健委通报郑飞医院“血液净化”问题:拟撤销该院血液净化技术备案
  • 两岸基层民生发展交流会在浙江开幕
  • 北理工:开除宫某党籍,免去行政职务,解除聘用关系