> 웹 프론트엔드 > JS 튜토리얼 > vue.js 데이터 바인딩 작동 방법

vue.js 데이터 바인딩 작동 방법

php中世界最好的语言
풀어 주다: 2018-06-06 14:10:25
원래의
1261명이 탐색했습니다.

이번에는 vue.js 데이터 바인딩 작업 방법을 보여드리고, vue.js 데이터 바인딩 작업 시 주의사항은 무엇인지 살펴보겠습니다.

데이터 바인딩

반응형 데이터 바인딩 시스템. 바인딩이 설정된 후 DOM은 데이터와 동기화되므로 DOM을 수동으로 유지 관리할 필요가 없습니다. 코드를 더욱 간결하고 이해하기 쉽게 만들고 효율성을 향상시킵니다.

데이터 바인딩 구문

1. 텍스트 보간

{{ }}Mustache tag

<span>Hello {{ name }}</span>
로그인 후 복사
rrree

Single interpolation

DOM 변경 원인

data:{
    name: 'vue'
}
== > Hello vue
로그인 후 복사

2. HTML 속성

Mustache 태그 {{ }}

<span v-once="name">{{ name }}</span>
로그인 후 복사

약어:

<p v-bind:id="&#39;id-&#39;+id"></p>
로그인 후 복사

3.Mustache 태그 안에 배치된 텍스트 콘텐츠입니다. 속성 값을 직접 출력하는 것 외에도 결합 표현식은 간단한 JavaScript 표현식과 선택적으로 하나 이상의 필터로 구성될 수 있습니다(정규 표현식은 지원되지 않습니다. 복잡한 변환이 필요한 경우 처리를 위해 필터 또는 계산된 속성을 사용합니다).

<p :id="&#39;id-&#39;+id"></p>
로그인 후 복사

4. Filters

vue.js를 사용하면 파이프 문자 "|"로 표시된 표현식 뒤에 선택적 필터를 추가할 수 있습니다.

{{ index + 1}}
{{ index == 0 ? 'a' : 'b' }}
{{name.split('').join('|') }}
{{ var a = 1 }} //无效
로그인 후 복사
이때 filterA는 name의 값을 첫 번째 매개변수로, arg1과 arg2를 두 번째와 세 번째 매개변수로 필터 함수에 전달합니다.

최종 함수의 반환 값은 출력 결과입니다. arg1 및 arg2는 표현식을 사용하거나 작은따옴표를 추가하여 문자열을 직접 전달할 수 있습니다.

예:

{{ name | uppercase }} // Vue.js将name的值传入给uppercase这个内置的过滤器中(本质是一个函数),返回字符串的大写值。
{{ name | filterA | filterB }}  //多个过滤器链式使用
{{ name | filterA arg1 arg2 }} //传入多个参数
로그인 후 복사
필터limitBy는 두 개의 매개변수를 허용할 수 있습니다. 첫 번째 매개변수는 표시 번호를 설정하는 것이고, 두 번째 매개변수는 선택사항이며 시작 요소의 배열 첨자를 참조합니다.

vue.js 내장 10개 필터(Vue.js2.0에서는 제거됨)

capitalize

: 문자열의 첫 문자가 대문자로 변환됩니다.

uppercase: 문자열을 대문자로 변환합니다.
lowercase: 문자열을 소문자로 변환합니다.
currency: 매개변수는 {String}[통화 기호], {숫자}[소수 자릿수]이며, 숫자를 통화 기호로 변환하고 숫자 섹션 번호를 자동으로 추가합니다.

{{ name.split('') | limitBy 3 1 }} // ->u,e
로그인 후 복사
pluralize: 매개변수는 {String}single, [double, three]이고, 문자열은 복수형입니다.

{{ amount | currency '¥' 2 }} //若amount值为1000,则输出为¥1,000.00
로그인 후 복사
<p v-for="c in count">{{ c | pluralize 'item' }} {{ c | pliralize 'st' 'nd' 'rd' 'th' }} </p>
로그인 후 복사
json: 매개변수는 {Number}[indent] 공백 들여쓰기 번호이며, json 객체 데이터는 json 형식에 맞는 문자열로 출력됩니다.

debounce

: 들어오는 값은 함수여야 하며 매개 변수는 선택 사항이며 지연 길이인 {Number}[wait]입니다. 그 결과 함수가 호출된 후 n밀리초가 될 때까지 작업이 실행되지 않습니다.

//输出结果:
1item 1st
2items 2nd
3items 3rd
4items 4th
로그인 후 복사
limitBy: 들어오는 값은 배열이어야 하며, 매개변수는 {Number}limit, {Number}[offset]이고,limit는 표시할 숫자입니다. , 오프셋은 배열 첨자 표시를 시작합니다.

<input v-on:keyup="onKeyup | debounce 500"> //input元素上监听了keyup事件,并且延迟500ms触发
로그인 후 복사
filterBy{Number}limit{Number}[offset],limit为显示个数,offset为开始显示数组下标。
<p v-for="item in items | limitBy 10"></p> //items为数组,且只显示数组中的前十个元素
로그인 후 복사

filterBy:传入值必须是数组,参数为{String | Function}targetStringOrFunction,即需要匹配的字符串或函数;"in"可选分隔符。{String}[...searchKeys],为检索的属性区域。

<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],在多个属性中进行检索。
로그인 후 복사
//输出结果
vue1.0
{"name":"vue1.0","version":"1.0"}
로그인 후 복사

使用自定义的过滤函数,函数可以在选项methods中定义

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

orderBy:传入值必须是数组,参数为{String|Array|Function}sortKeys: 들어오는 값은 배열이어야 하며 매개변수는 {String | Function}targetStringOrFunction입니다. 이는 "in"이 일치해야 하는 문자열 또는 함수입니다. 선택적 구분 기호. {String}[...searchKeys]는 검색된 속성 영역입니다.

<p v-for="item in items | orderBy &#39;name&#39; -1">{{ item.name}}</p> //items数组中以键名name进行降序排列
로그인 후 복사
<p v-for="item in items | orderBy [name,version]">{{item.name}}</p> //使用items里的两个键名进行排序
로그인 후 복사

맞춤 필터 함수를 사용하세요. 함수는 옵션 메서드에서 정의할 수 있습니다

<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的值的大小进行排序
  }
}
로그인 후 복사

orderBy

: 들어오는 값은 배열이어야 하며 매개변수는 {String|Array|Function}sortKeys입니다. code>, 즉 정렬 전략을 지정합니다.

단일 키 이름:

<img v-bind:src="avatar" /> <==>  <img src="{{avatar}}" />
로그인 후 복사
여러 키 이름:

<button v-on:click.stop="doClick"></button> //stop:停止冒泡。相当于调用了e.stopPropagagation().
로그인 후 복사

사용자 정의 정렬 기능:

var vm = new Vue({
    el: '#app',
    data: {
      firstName:'Gavin',
      lastName:'CLY'
    },
    computed: {
      fullName:function(){
        //this指向vm实例
        return this.firstName + ' ' + this.lastName;
      }
    }
})
로그인 후 복사
로그인 후 복사

5. 지침

명령어의 값은 바인딩 표현식으로 제한됩니다. 표현식이 변경되면 일부 특수 동작이 바인딩된 DOM에 적용됩니다. 매개변수: src는 매개변수입니다.

<p>{{ firstName }}</p>  //Gavin
<p>{{ lastName }}</p>  //CLY
<p>{{ fullName }}</p>  //Gavin CLY
로그인 후 복사
로그인 후 복사
Modifier: 반각 마침표로 시작하는 특수 접미사. 명령어가 특별한 방식으로 바인딩되어야 함을 나타내는 데 사용됩니다.

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);
        }
      }
    }
})
로그인 후 복사
로그인 후 복사
🎜🎜🎜계산된 속성🎜🎜🎜

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

1.基础例子

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

注:此时对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);
        }
      }
    }
})
로그인 후 복사
로그인 후 복사

表单控件

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

var vm = new Vue({
    el:'#app',
    data: {
      message: '',
      gender: '',
      cheched: '',
      multiChecked: '',
      a: 'checked',
      b: 'checked'
    }
})
로그인 후 복사

1. Text

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

<input type="text" v-model="message" />
<span>Your input is : {{ message }} </span>
로그인 후 복사

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值
로그인 후 복사

3.Checkbox

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

<input type="checkbox" v-model="checked" />
<span>checked: {{ checked }} </span> //显示的是true/false
로그인 후 복사

多个勾选框,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
로그인 후 복사

4.Select

单选

<select v-model="selected">
  <option selected>A</option>
  <option>B</option>
  <option>C</option>
</select>
<span>Selected: {{ selected }}</span>
로그인 후 복사

多选

<select v-model="multiSelected" multiple>
  <option selected>A</option>
  <option>B</option>
  <option>C</option>
</select>
<span>MultiSelected: {{ multiSelected.join('|') }}</span>
로그인 후 복사

5.绑定value

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

Checkbox

<input type="checkbox" v-model="checked" v-bind:true-value="a" v-bind:false-value="b" />
로그인 후 복사

选中:

vm.checked == vm.a  //=> true
로그인 후 복사

未选中:

vm.checked == vm.b //=>true
로그인 후 복사

Radio

<input type="radio" v-model="checked" v-bind:value="a" >
로그인 후 복사

选中:

vm.checked == vm.a //=> true
로그인 후 복사

3.Select Options

<select v-model="selected">
    <!-- 对象字面量 -->
    <option v-bind:value="{ number:123}">123</option>
</select>
로그인 후 복사

选中:

typeof vm.selected //=> object
vm.selected.number //=> 123
로그인 후 복사

6.参数特性

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

<!-- 在 "change" 而不是 "input" 事件中更新 -->
<input v-model.lazy="msg" >
로그인 후 복사

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

<input v-model.number="age" type="number">
로그인 후 복사

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

<input v-model.trim="msg">
로그인 후 복사

Class与Style绑定

1.Class绑定

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

<p class="tab" v-bind:class="{&#39;active&#39;:active,&#39;unactive&#39;:!active}"></p>
로그인 후 복사

vm实例中需要包含:

data:{
  active:true
}
로그인 후 복사

渲染结果为:

<p class="tab active"></p>
로그인 후 복사

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

<p v-bind:class="[classA,classB]"></p>
로그인 후 복사

vm实例中需要包括:

data:{
  classA:"class-a",
  classB:"class-b"
}
로그인 후 복사

渲染结果为:

<p class="class-a class-b"></p>
로그인 후 복사

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

<p v-bind:class="[classA,isB?classB:""]"></p>
로그인 후 복사

vm.isB = false
로그인 후 복사

则渲染结果为

<p class="class-a"></p>
로그인 후 복사

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

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

<p v-bind:style="alertStyle"></p>
로그인 후 복사

vm实例中包含:

data:{
  alertStyle:{
    color: 'red',
    fontSize: '2px'
  }
}
로그인 후 복사
<p v-bind:style="{fontSize:alertStyle.fontSize,color:&#39;red&#39;}"></p>
로그인 후 복사

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

<p v-bind:style="[ styleObjectA,styleObjectB]" .></p>
로그인 후 복사

3.自动添加前缀

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

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

推荐阅读:

怎样使用js操作图片转为base64

위 내용은 vue.js 데이터 바인딩 작동 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿