Home Web Front-end JS Tutorial How to operate vue.js data binding

How to operate vue.js data binding

Jun 05, 2018 pm 03:38 PM
vue.js data binding

This time I will show you how to operate vue.js data binding, and what are the precautions for how to operate vue.js data binding. The following is a practical case, let's take a look.

The example in this article describes the vue.js data binding operation. Share it with everyone for your reference, the details are as follows:

Data Binding

Responsive data binding system. After the binding is established, the DOM will be synchronized with the data, and there is no need to manually maintain the DOM. Make the code more concise and easy to understand and improve efficiency.

Data binding syntax

1. Text interpolation

{{ }}Mustache tag

<span>Hello {{ name }}</span>
Copy after login
data:{
    name: 'vue'
}
== > Hello vue
Copy after login

Single interpolation

Changing the vm instance attribute value after the first assignment will not cause DOM changes

<span v-once="name">{{ name }}</span>
Copy after login

2. HTML attributes

Mustache tag {{ }}

<p v-bind:id="&#39;id-&#39;+id"></p>
Copy after login

Abbreviation:

<p :id="&#39;id-&#39;+id"></p>
Copy after login

3. Binding expression

The text content placed in the Mustache tag. In addition to directly outputting the attribute value, a binding expression can consist of a simple JavaScript expression and optionally one or more filters (regular expressions are not supported. If complex conversion is required, use filters or computed properties for processing).

{{ index + 1}}
{{ index == 0 ? 'a' : 'b' }}
{{name.split('').join('|') }}
{{ var a = 1 }} //无效
Copy after login

4. Filter

vue.js allows adding optional filters after expressions, indicated by the pipe character "|".

{{ name | uppercase }} // Vue.js将name的值传入给uppercase这个内置的过滤器中(本质是一个函数),返回字符串的大写值。
{{ name | filterA | filterB }}  //多个过滤器链式使用
{{ name | filterA arg1 arg2 }} //传入多个参数
Copy after login

At this time, filterA passes the value of name as the first parameter, and arg1 and arg2 as the second and third parameters into the filter function.

The return value of the final function is the output result. arg1 and arg2 can use expressions or add single quotes to directly pass in strings.

For example:

{{ name.split('') | limitBy 3 1 }} // ->u,e
Copy after login

The filter limitBy can accept two parameters. The first parameter is to set the number of displays. The second parameter is optional and refers to the array subscript of the starting element. .

The 10 built-in filters of vue.js (removed in Vue.js2.0)

capitalize: The first character of the string is converted to uppercase.
uppercase: Convert the string to uppercase.
lowercase: The string is converted to lowercase.
currency: The parameters are {String}[currency symbol], {Number}[decimal places], convert the number into currency symbol, and automatically add numerical section numbers.

{{ amount | currency '¥' 2 }} //若amount值为1000,则输出为¥1,000.00
Copy after login

pluralize: The parameters are {String}single,[double,triple], and the string is pluralized.

<p v-for="c in count">{{ c | pluralize 'item' }} {{ c | pliralize 'st' 'nd' 'rd' 'th' }} </p>
Copy after login
//输出结果:
1item 1st
2items 2nd
3items 3rd
4items 4th
Copy after login

json: The parameter is {Number}[indent] space indentation number, and the json object data is output into a string that conforms to the json format.

debounce: The incoming value must be a function, and the parameter is optional, which is {Number}[wait], which is the delay length. The effect is that the action will not be executed until n milliseconds after the function is called.

<input v-on:keyup="onKeyup | debounce 500"> //input元素上监听了keyup事件,并且延迟500ms触发
Copy after login

limitBy: The incoming value must be an array, the parameter is {Number}limit, {Number}[offset], and the limit is Display the number, offset is the starting array subscript.

<p v-for="item in items | limitBy 10"></p> //items为数组,且只显示数组中的前十个元素
Copy after login

filterBy: The incoming value must be an array, and the parameter is {String | Function}targetStringOrFunction, which is the string or function that needs to be matched; "in" can Select separator. {String}[...searchKeys], is the retrieved attribute area.

<p v-for="name in names | filterBy &#39;1.0&#39;">{{ name }}</p> //检索names数组中值包含1.0的元素
<p v-for="item in items | filterBy &#39;1.0&#39; in &#39;name&#39;">{{ item | json }}</p> //检索items中元素属性name值为1.0的元素输出。检索区域也可以为数组,即in [name,version],在多个属性中进行检索。
Copy after login
//输出结果
vue1.0
{"name":"vue1.0","version":"1.0"}
Copy after login

Use a custom filter function, which can be defined in the options methods

<p v-for="item in items | filterBy customFilter"
  methods:{
    cuestomFilter:function(item){
      if(item.name) return true;  //检索所有元素中包含name属性的元素
    }
  }
Copy after login

orderBy: The incoming value must be an array, and the parameter is {String |Array|Function}sortKeys, which specifies the sorting strategy.

Single key name:

<p v-for="item in items | orderBy &#39;name&#39; -1">{{ item.name}}</p> //items数组中以键名name进行降序排列
Copy after login

Multiple key names:

<p v-for="item in items | orderBy [name,version]">{{item.name}}</p> //使用items里的两个键名进行排序
Copy after login

Custom sorting function:

<p v-for="item in items | orderBy customOrder">{{item.name}}</p>
methods:{
  customOrder: function(a,b){
    return parseFloat(a.version) > parseFloat(b.version) //对比item中version的值的大小进行排序
  }
}
Copy after login

5. Command The value of the

directive is limited to the binding expression, that is, when the value of the expression changes, some special behavior will be applied to the bound DOM.

Parameter: src is the parameter

<img v-bind:src="avatar" /> <==>  <img src="{{avatar}}" />
Copy after login

Modifier: a special suffix starting with a half-width period., used to indicate that the instruction should be bound in a special way.

<button v-on:click.stop="doClick"></button> //stop:停止冒泡。相当于调用了e.stopPropagagation().
Copy after login

计算属性

避免在模板中加入过重的业务逻辑,保证模版的结构清晰和可维护性。

1.基础例子

var vm = new Vue({
    el: '#app',
    data: {
      firstName:'Gavin',
      lastName:'CLY'
    },
    computed: {
      fullName:function(){
        //this指向vm实例
        return this.firstName + ' ' + this.lastName;
      }
    }
})
Copy after login
<p>{{ firstName }}</p>  //Gavin
<p>{{ lastName }}</p>  //CLY
<p>{{ fullName }}</p>  //Gavin CLY
Copy after login

注:此时对vm.firstNamevm.lastName进行修改,始终会影响vm.fullName

2.Setter

更新属性时带来便利

var vm = new Vue({
    el:'#el',
    data:{
      cents:100
    },
    computed:{
      price:{
        set:function(newValue) {
          this.cents = newValue * 100;
        },
        get:function(){
          return (this.cents / 100).toFixed(2);
        }
      }
    }
})
Copy after login

表单控件

v-model:对表单元素进行双向数据绑定,在修改表单元素值时,实例vm中对应的属性值也同时更新,反之亦然。

var vm = new Vue({
    el:'#app',
    data: {
      message: '',
      gender: '',
      cheched: '',
      multiChecked: '',
      a: 'checked',
      b: 'checked'
    }
})
Copy after login

1. Text

输入框示例,用户输入的内容和vm.message直接绑定:

<input type="text" v-model="message" />
<span>Your input is : {{ message }} </span>
Copy after login

2. Radio

单选框示例:

<label><input type="radio" value="male" v-model="gender">男</lable>
<label><input type="radio" value="famale" v-model="gender">女</lable>
<p>{{ gender }}</p> //显示的是value值
Copy after login

3.Checkbox

单个勾选框,v-model即为布尔值,此时Input的value并不影响v-model的值。

<input type="checkbox" v-model="checked" />
<span>checked: {{ checked }} </span> //显示的是true/false
Copy after login

多个勾选框,v-model使用相同的属性名称,且属性为数组。

<label><input type="checkbox" value="1" v-model="multiChecked">1</label>
<label><input type="checkbox" value="1" v-model="multiChecked">2</label>
<label><input type="checkbox" value="1" v-model="multiChecked">3</label>
<p>MultiChecked:{{ multiChecked.join{'|'} }}</p> //multiChecked:1|2
Copy after login

4.Select

单选

<select v-model="selected">
  <option selected>A</option>
  <option>B</option>
  <option>C</option>
</select>
<span>Selected: {{ selected }}</span>
Copy after login

多选

<select v-model="multiSelected" multiple>
  <option selected>A</option>
  <option>B</option>
  <option>C</option>
</select>
<span>MultiSelected: {{ multiSelected.join('|') }}</span>
Copy after login

5.绑定value

通过v-bind实现,表单控件的值绑定到Vue市里的动态属性上。

Checkbox

<input type="checkbox" v-model="checked" v-bind:true-value="a" v-bind:false-value="b" />
Copy after login

选中:

vm.checked == vm.a  //=> true
Copy after login

未选中:

vm.checked == vm.b //=>true
Copy after login

Radio

<input type="radio" v-model="checked" v-bind:value="a" >
Copy after login

选中:

vm.checked == vm.a //=> true
Copy after login

3.Select Options

<select v-model="selected">
    <!-- 对象字面量 -->
    <option v-bind:value="{ number:123}">123</option>
</select>
Copy after login

选中:

typeof vm.selected //=> object
vm.selected.number //=> 123
Copy after login

6.参数特性

.lazy:默认情况下,v-model在input事件中同步输入框与数据,加lazy属性后会在change事件中同步。

<!-- 在 "change" 而不是 "input" 事件中更新 -->
<input v-model.lazy="msg" >
Copy after login

.number:自动将用户输入转为Number类型,如果原值转换结果为NaN,则返回原值。

<input v-model.number="age" type="number">
Copy after login

.trim:如果要自动过滤用户输入的首尾空格,可以添加 trim 修饰符到 v-model 上过滤输入

<input v-model.trim="msg">
Copy after login

Class与Style绑定

1.Class绑定

对象语法:v-bind:class接受参数是一个对象,而且可以与普通的class属性共存。

<p class="tab" v-bind:class="{&#39;active&#39;:active,&#39;unactive&#39;:!active}"></p>
Copy after login

vm实例中需要包含:

data:{
  active:true
}
Copy after login

渲染结果为:

<p class="tab active"></p>
Copy after login

数组语法:v-bind:class也接受数组作为参数。

<p v-bind:class="[classA,classB]"></p>
Copy after login

vm实例中需要包括:

data:{
  classA:"class-a",
  classB:"class-b"
}
Copy after login

渲染结果为:

<p class="class-a class-b"></p>
Copy after login

使用三元表达式切换数组中的class

<p v-bind:class="[classA,isB?classB:""]"></p>
Copy after login

vm.isB = false
Copy after login

则渲染结果为

<p class="class-a"></p>
Copy after login

2.内联样式绑定(style属性绑定)

对象语法:直接绑定符合样式格式的对象。

<p v-bind:style="alertStyle"></p>
Copy after login

vm实例中包含:

data:{
  alertStyle:{
    color: 'red',
    fontSize: '2px'
  }
}
Copy after login
<p v-bind:style="{fontSize:alertStyle.fontSize,color:&#39;red&#39;}"></p>
Copy after login

数组语法:v-bind:style允许将多个样式对象绑定到同一元素上。

<p v-bind:style="[ styleObjectA,styleObjectB]" .></p>
Copy after login

3.自动添加前缀

在使用transform这类属性时,v-bind:style会根据需要自动添加厂商前缀。:style在运行时进行前缀探测,如果浏览器版本本省就不支持不加前缀的css属性,那就不会添加。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

VUE做出带有数据收集、校验和提交功能表单

怎样使用Vue操作DIV

The above is the detailed content of How to operate vue.js data binding. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
1 months ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
1 months ago By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Have Crossplay?
1 months ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to implement data binding function in SwiftUI using MySQL How to implement data binding function in SwiftUI using MySQL Jul 30, 2023 pm 12:13 PM

How to use MySQL to implement data binding function in SwiftUI. In SwiftUI development, data binding can realize automatic updating of interface and data, improving user experience. As a popular relational database management system, MySQL can store and manage large amounts of data. This article will introduce how to use MySQL to implement data binding function in SwiftUI. We will make use of Swift's third-party library MySQLConnector, which provides connections and queries to MySQL data.

In-depth discussion of how vite parses .env files In-depth discussion of how vite parses .env files Jan 24, 2023 am 05:30 AM

When using the Vue framework to develop front-end projects, we will deploy multiple environments when deploying. Often the interface domain names called by development, testing and online environments are different. How can we make the distinction? That is using environment variables and patterns.

Detailed graphic explanation of how to integrate the Ace code editor in a Vue project Detailed graphic explanation of how to integrate the Ace code editor in a Vue project Apr 24, 2023 am 10:52 AM

Ace is an embeddable code editor written in JavaScript. It matches the functionality and performance of native editors like Sublime, Vim, and TextMate. It can be easily embedded into any web page and JavaScript application. Ace is maintained as the main editor for the Cloud9 IDE and is the successor to the Mozilla Skywriter (Bespin) project.

Let's talk in depth about reactive() in vue3 Let's talk in depth about reactive() in vue3 Jan 06, 2023 pm 09:21 PM

Foreword: In the development of vue3, reactive provides a method to implement responsive data. This is a frequently used API in daily development. In this article, the author will explore its internal operating mechanism.

Explore how to write unit tests in Vue3 Explore how to write unit tests in Vue3 Apr 25, 2023 pm 07:41 PM

Vue.js has become a very popular framework in front-end development today. As Vue.js continues to evolve, unit testing is becoming more and more important. Today we’ll explore how to write unit tests in Vue.js 3 and provide some best practices and common problems and solutions.

A simple comparison of JSX syntax and template syntax in Vue (analysis of advantages and disadvantages) A simple comparison of JSX syntax and template syntax in Vue (analysis of advantages and disadvantages) Mar 23, 2023 pm 07:53 PM

In Vue.js, developers can use two different syntaxes to create user interfaces: JSX syntax and template syntax. Both syntaxes have their own advantages and disadvantages. Let’s discuss their differences, advantages and disadvantages.

A brief analysis of how vue implements file slicing upload A brief analysis of how vue implements file slicing upload Mar 24, 2023 pm 07:40 PM

In the actual development project process, sometimes it is necessary to upload relatively large files, and then the upload will be relatively slow, so the background may require the front-end to upload file slices. It is very simple. For example, 1 A gigabyte file stream is cut into several small file streams, and then the interface is requested to deliver the small file streams respectively.

Analyze the principle of Vue2 implementing composition API Analyze the principle of Vue2 implementing composition API Jan 13, 2023 am 08:30 AM

Since the release of Vue3, the word composition API has entered the field of vision of students who write Vue. I believe everyone has always heard how much better the composition API is than the previous options API. Now, due to the release of the @vue/composition-api plug-in, Vue2 Students can also get on the bus. Next, we will mainly use responsive ref and reactive to conduct an in-depth analysis of how this plug-in achieves this.

See all articles