后端小白的VUE入门笔记, 前端高能慎入(二)

简介: 后端小白的VUE入门笔记, 前端高能慎入(二)

事件绑定相关#


@click绑定事件#


<button @click="text1">text1</button>
<button @click="text2('haha')">text2</button>
<button @click="text3($event)">text3</button>
<button @click="text4">text4</button><!-- 如果没有指定参数进去,传递进去的就是event-->
<button @click="text5(123,$event)">text5</button>
 var vm = new Vue({
el:'#test',
methods:{
    text1(){
        alert("text 1");
    },
    text2(msg){
        alert(msg);
    },
    text3(event){
        alert(event.target.innerHTML);
    },
    text4(event){
        alert(event.target.innerHTML);
    },
    text5(msg,event){
        alert(msg+event.target.innerHTML);
    },


可以看到@click使用vue中method的函数时,如果没有参数,可以简写,去掉(), 如果不写参数,传递进去的是事件本身event , text三中通过event拿到了标签的文本内容


@click.prevent阻止事件的默认行为#


<a href="http:www.baidu.com" @click.prevent="text8">百度一下</a>  <!-- 阻止事件的默认行为 -->


监听某个按键的点击事件#


<input type="text" @keyup.enter="text9"> <!--  @keyup.13(名字)  监听某一个键的点击事件 -->


收集表单数据#


使用vue将用户填入表单中的数据收集起来, 收集到哪里去? 其实是收集到 vue的data块中的属性中


其实就是在html使用v-model暴力绑定dom监听, 将单选框,输入框,多选框中用户输入进去的内容和data中的属性关联起来


  • input,textarea 等输入框,收集起来的值就是用户输入进去的值
  • 单选框 radio ,多选框 checkbox 等选择框,收集起来的值的 html中的value属性的值


<h1>表单中最终提交给后台的是 value值</h1><br>
<h2> 使用v-model实现表单数据的自动收集 </h2>
<form action="/XXX"  @submit.prevent="handleSubmit" ><!-- 阻止表单的默认自动提交事件 -->
   <span>用户名:</span>
   <input type="text" v-model="username"><br>
   <span>密码</span>
   <input type="password"  v-model="pwd" ><br>
   <span>性别</span><br>
   <input type="radio" id="female" value="女" v-model="sex">
   <label for="female">女</label><br>
   <input type="radio" id="male"  value="男" v-model="sex">
   <label for="male">男</label><br><br>
   <span>爱好</span><br>
   <input type="checkbox" id="basket" value="basket" v-model="likes">
   <label for="basket">篮球</label>
   <input type="checkbox" id="foot" value="foot"  v-model="likes">
   <label for="foot">足球</label>
   <input type="checkbox" id="pingpang"  value="pingpang"   v-model="likes">
   <label for="pingpang">乒乓球</label><br><br>
   <span>城市</span><br>
   <select v-model="cityId">
       <option value="">未选择</option>
       <option :value="city.id" v-for="(city,index) in allCitys" :key="index">{{city.name}}</option>
   </select>
   <span>介绍:</span>
   <textarea name="" id="" cols="30" rows="10" v-model="dec"></textarea>
<input type="submit" value="注册"><br>
    </form>
    </div>
    <script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript">
var vm = new Vue({
    el:'#test',
    data:{
        username:'',
        pwd:'',
        sex:'女',
        likes:['foot'],
        allCitys:[{id:1,name:'北京'},{id:2,name:"山东"},{id:3 ,name:"青岛"}],
        cityId:'3' /* 默认让 3被选中*/,
        dec:"哈哈"
    },
    methods:{
        handleSubmit(){
            alert(this.username+this.pwd);
            alert(this.sex);
        }
    }
})


vue的生命周期#


vue对象在创建初始化的过程中一次执行如下声明周期相关的方法, 根据这个特性,通常把加载进入一个新的页面中时去发送ajax请求的方法放到mounted(){},收尾工作放在beforeDestroy(){}


var vm = new Vue({
el: "#text",
data: {},
beforeCreate() {  // 创建之前回调
    console.log("beforeCreate");
},
created() {  // 创建之后回调
    console.log("created");
},
beforeMount() {
    console.log("beforrMount");
},
// todo 常用, 异步操作, 比如发起ajax请求获取数据, 添加定时器
mounted() { // 初始化显示之后会立即调用一次
    console.log("mounted");
    this.intervalId = setInterval(() => {
        console.log("干掉vm之后, 定时器还在跑, 内存泄露了");
        this.isShow = !this.isShow;
    }, 1000);
    /*
      如果下面不使用箭头回调函数, this就是window, 而不是vm
    * setInterval(() => {
        this.isShow= !this.isShow;
    },1000);
    * */
},
// 更新阶段
beforeUpdate() {  //更新阶段之前回调
    console.log("beforeUpdate");
},
updated() {  // 更新阶段之后回调
    console.log("updated");
},
// 死亡阶段
// todo 常用 收尾工作
beforeDestroy() {  // 死亡之前回调一次
    console.log("beforeDestroy ");
    clearInterval(this.intervalId);
},
destroyed() {
    console.log("destroyed");
},
methods: {}
}
});


ES的语法糖,箭头函数#


比如在设置定时器时, 定时器中需要对vue的属性进行操作,在定时器的代码块中this指的是定时器对象,es6的箭头语法解决就这个问题, 在箭头函数中this没有的属性,会到外层的vue中来找


this.intervalId = setInterval(() => {
    console.log("干掉vm之后, 定时器还在跑, 内存泄露了");
    this.isShow = !this.isShow;
}, 1000);


动画#


按照vue的下面的几步要求, vue 会给目标元素添加或者移除特定的 css,实现动画的效果

  1. 需要添加动画的标签被 <transition name="" > XXX </transition>包裹


<div id="test">
   <transition name="YYY">
    <p v-show="isShow" class="">toggle</p>
    <button @click="isShow=!isShow">toggle</button>
    </transition>
</div>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript">
    new Vue({
        el: '#test',
        data() {
            return {
                isShow: true
            }
        }
    });


  1. 定义以 .YYY-开头的 css属性, 这个YYY就是上面自定义的YYY, 需要在这些自定义的属性中指定过度的属性以及隐藏的属性


一个简单的动画效果标签从隐藏->出现, 再从出现到隐藏的过程,就像下面这样


v-enter  v-enter-to   v-leave    v-leave-to
  隐藏     出现         出现       隐藏


自定义这四个时期的状态


/* 显示的过度效果*/
.YYY-enter-active {
    transition: all 1s;
}
/* 隐藏的过度效果*/
.YYY-leave-active {
    transition: all 3s;
}
/* 从无到有的样式  */
.YYY-enter {
    opacity: 0;
}
/* 从有到无的样式  */
.YYY-leave-to {
    opacity: 0;
    transform: translateX(20px);  /* 离开时,向X轴的正方向移动20px*/
}


格式化时间的插件库#


点击进入 moment.js网址 ,在这里可以找到需要引入的script标签

点击进入 moment.js的文档 在文档中可以找到对应的格式和例子


<div id="test">
    <h2>显示格式化的日期时间</h2>
    <p>{{date}}</p>
    <p>默认完整: {{date | dateFormat}}</p><!--  一旦我们这么写, 他就会把date的值,传递给dateFormat函数 -->
    <p>年月日: {{date | dateFormat('YYYY-MM-DD')}}</p><!--  一旦我们这么写, 他就会把date的值,传递给dateFormat函数 -->
    <p>时分秒: {{date | dateFormat('HH:mm:ss')}}</p><!--  一旦我们这么写, 他就会把date的值,传递给dateFormat函数 -->
</div>
/*  这个在官网上查找 */
<script  type="text/javascript" src="https://cdn.bootcss.com/moment.js/2.21.0/moment.js"></script>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript">
        // 自定义过滤器
    Vue.filter('dateFormat',(value,format)=>{ /*  Vue是函数对象 */
      return moment(value).format(format || 'YYYY-MM-DD HH:mm:ss');
    });
    new Vue({
        el:'#test',
        data:{
            date:new Date()
        }
    });


Es的语法糖#


es6 的语法: 形参默认值 , 没传值的话,就使用默认值


function(value,format="YYYY-MM-DD"){
     return moment(value).format(format);
 }


vue的指令#


常见的原生指令如下


v:text : 更新元素的textContent <br>
v:html : 更新元素的innerHtml<br>
v-if: true    如果为true,标签才会输出到页面 <br>
v-else:    如果为false,标签才会输出到页面 <br>
v-show:  通过控制display的样式来控制显示和隐藏<br>
v-for:    遍历数组对象 <br>
v-on:   绑定监听事件, 一般直接写  @ <br>
v-bind:  强制绑定解析表达式  一般简写成 : <br>
v-model:  双向数据绑定 <br>
ref:  指定唯一的标识, Vue对象可以通过 $els 属性来访问这个元素对象  <br>
v-cloak: 防止闪现可能应为网速的原因{{msg}} 一直解析不了, 于是用户就看到它了,不友好, 于是 vue推出 与css配合 [v-cloak] {display:none}  <br>


补充最后两个

  • ref 指定唯一的标识, Vue对象可以通过 $els 属性来访问这个元素对象
  • 防止闪现可能应为网速的原因{{msg}} 一直解析不了, 于是用户就看到它了,不友好, 于是 vue推出 与css配合 [v-cloak] {display:none}


例子:


<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        [v-cloak] {   /*  回去寻找有这个属性名的标签  [v-cloak]   , 就是下面的p标签 */
            display:none
        }
    </style>
</head>
<body>
<div id="test">
    <p ref="content123">哈哈哈哈</p>
    <button @click="hint">提示</button>
    //  v-cloak="" + 上面的css 样式避免 {{ }} 闪现的效果
    <p v-cloak="">{{msg}}</p>
    <br>
</div>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript">
    // 注册全局指令
    Vue.directive('')
    new Vue({
       el:'#test',
       data:{
        msg: '嘿嘿'
       } ,
        methods:{
            hint(){
              //  因为 `<p ref="content123">哈哈哈哈</p>` 使用了ref,所以vue可以通过this.$refs.content123 找到指定的这个元素
                alert(this.$refs.content123.textContent)
            }
        }
    });
相关文章
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
1167 1
|
8月前
|
存储 前端开发 安全
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
346 5
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
725 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
705 70
|
12月前
|
存储 消息中间件 前端开发
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
校园圈子系统校园论坛小程序采用uni-app前端框架,支持多端运行,结合PHP后端(如ThinkPHP/Laravel),实现用户认证、社交关系管理、动态发布与实时聊天功能。前端通过组件化开发和uni.request与后端交互,后端提供RESTful API处理业务逻辑并存储数据于MySQL。同时引入Redis缓存热点数据,RabbitMQ处理异步任务,优化系统性能。核心功能包括JWT身份验证、好友系统、WebSocket实时聊天及活动管理,确保高效稳定的用户体验。
660 4
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
|
前端开发 算法 NoSQL
前端uin后端php社交软件源码,快速构建属于你的交友平台
这是一款功能全面的社交软件解决方案,覆盖多种场景需求。支持即时通讯(一对一聊天、群聊、文件传输、语音/视频通话)、内容动态(发布、点赞、评论)以及红包模块(接入支付宝、微信等第三方支付)。系统采用前后端分离架构,前端基于 UniApp,后端使用 PHP 框架(如 Laravel/Symfony),配合 MySQL/Redis 和自建 Socket 服务实现高效实时通信。提供用户认证(JWT 集成)、智能匹配算法等功能,助力快速上线,显著节约开发成本。
500 2
前端uin后端php社交软件源码,快速构建属于你的交友平台
|
11月前
|
人工智能 监控 前端开发
AI工具:前端与后端的终极对决?谁将成为新时代的宠儿?
深入探讨AI工具对前端和后端开发的具体影响、各自的机遇与挑战,并分析未来开发者如何驾驭AI,实现能力跃迁。
698 0
|
监控 前端开发 Java
构建高效Java后端与前端交互的定时任务调度系统
通过以上步骤,我们构建了一个高效的Java后端与前端交互的定时任务调度系统。该系统使用Spring Boot作为后端框架,Quartz作为任务调度器,并通过前端界面实现用户交互。此系统可以应用于各种需要定时任务调度的业务场景,如数据同步、报告生成和系统监控等。
778 9
|
前端开发 NoSQL Java
【Java若依框架】RuoYi-Vue的前端和后端配置步骤和启动步骤
本文介绍了如何配置和启动基于Java的若依(RuoYi)项目,涵盖后端和前端的详细步骤。首先,准备Redis、MySQL以及IDE(如Idea和VS)。接着,通过GitHub获取代码并导入到IDE中,执行必要的SQL文件和配置数据库密码。然后,启动Redis并进行相关配置。最后,按照前端配置步骤克隆前端代码库,打开终端执行命令完成前端配置。整个过程详细记录了每一步的操作,帮助开发者顺利部署若依项目。 如果你觉得有帮助,请点赞、关注和收藏,这将是我持续分享的动力!
8534 4
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
1241 4