GVKun编程网logo

Vue.js双向绑定实现详解(vue.js 双向绑定)

23

对于想了解Vue.js双向绑定实现详解的读者,本文将是一篇不可错过的文章,我们将详细介绍vue.js双向绑定,并且为您提供关于4.vue的双向绑定的原理是什么?_vue双向绑定底层原理、angular

对于想了解Vue.js双向绑定实现详解的读者,本文将是一篇不可错过的文章,我们将详细介绍vue.js 双向绑定,并且为您提供关于4.vue 的双向绑定的原理是什么?_vue双向绑定底层原理、angular.js双向数据绑定实现动画特效、angularjs双向绑定数据input输入多个小数点问题(双向绑定不刷新的问题)、Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)的有价值信息。

本文目录一览:

Vue.js双向绑定实现详解(vue.js 双向绑定)

Vue.js双向绑定实现详解(vue.js 双向绑定)

这次给大家带来Vue.js双向绑定实现详解,Vue.js双向绑定实现的注意事项有哪些,下面就是实战案例,一起来看一下。

<html>
<head>
  <Meta charset=utf-8>
</head>
<body>
  <script src=https://unpkg.com/vue/dist/vue.min.js></script>
  <p id=app>
    <input type=text v-model=CurrentTime placeholder=当前时刻>
    <h1>当前时刻{{ CurrentTime }}</h1>
  </p>
  <script>
  var app = new Vue({
    el:'#app',
    data:{
      CurrentTime: new Date()
    },
    mounted:function(){
      var _this = this;
      this.timer = setInterval(function(){
        _this.CurrentTime = new Date();
      },1000);
    },
    beforeDestroy:function(){
      if(this.timer){
        clearInterval(this.timer);
      }
    }
  });
  </script>
</body>
</html>

{{ }} 是所谓的文本插值的方法,目的是显示双向绑定的数据

mounted 表示el挂载到实例上调用的事件

beforeDestory 是实例销毁以前调用

在上例中,在mounted事件中创建了一个定时器,每隔一秒就把当前时间写入文本框中,由于双向绑定的原因,H1标签的文本也会跟着变化,和文本框的文本保持一致。在beforeDestory事件里在Vue实例销毁前则会清除定时器

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

推荐阅读:

Vue.js开发mpvue框架步骤详解

vue实战项目里常用知识点归纳

4.vue 的双向绑定的原理是什么?_vue双向绑定底层原理

4.vue 的双向绑定的原理是什么?_vue双向绑定底层原理

angular.js双向数据绑定实现动画特效

angular.js双向数据绑定实现动画特效

一、HTML

1、引入必要的js文件,这个不多说了(注意由于之后要使用angular提供的动画效果和路由效果,所以要引入angular-animate.js和angular-route.js两个文件)

2、body内加入以下代码:

 <div  ng-view></div>

ng-view不多说,class通过双向绑定的方式,通过controller动态控制class中的{{pageclass}}

另外不要忘了使用模块

<html ng-app="bookStoreApp">

二、Javascript

1、app.js文件

这个是入口文件,代码如下:

var bookStoreApp = angular.module(''bookStoreApp'', [
    ''ngRoute'', ''ngAnimate'', ''bookStoreCtrls'', ''bookStoreFilters'',
    ''bookStoreServices'', ''bookStoreDirectives''
]);

bookStoreApp.config(function($routeProvider) {
    $routeProvider.when(''/hello'', {
        templateUrl: ''tpls/hello.html'',
        controller: ''HelloCtrl''
    }).when(''/list'', {
        templateUrl: ''tpls/bookList.html'',
        controller: ''BookListCtrl''
    }).otherwise({
        redirectTo: ''/hello''
    })
});

首先定义了bookStoreApp模型模型,并添加依赖。之后通过config设定路由,并设定每个路由对应的控制器。

2、controller.js

用来设定控制器,代码如下:

var bookStoreCtrls = angular.module(''bookStoreCtrls'', []);
bookStoreCtrls.controller(''HelloCtrl'', [''$scope'',
    function($scope) {
        $scope.greeting = {
            text: ''Hello''
        };
        $scope.page;
    }
]);
bookStoreCtrls.controller(''BookListCtrl'', [''$scope'',
    function($scope) {
        $scope.page;
    }
]);

这里就通过不同控制器下对pageClass变量的设定,实现了样式的切换。

三、CSS

.page {
    bottom:0;
    padding-top:200px;
    position:absolute;
    text-align:center;
    top:0;
    width:100%;
}
.page h1 {
    font-size:60px;
}
.page a {
    margin-top:50px;
}
.hello {
    background:#00D0BC;
    color:#FFFFFF;
}
.list{
    background:#E59400;
    color:#FFFFFF;
}
@-webkit-keyframes rotateFall {
    0% {
        -webkit-transform: rotateZ(0deg);
    }
    20% {
        -webkit-transform: rotateZ(10deg);
        animation-timing-function: ease-out;
    }
    40% {
        -webkit-transform: rotateZ(17deg);
    }
    60% {
        -webkit-transform: rotateZ(16deg);
    }
    100% {
        -webkit-transform: translateY(100%) rotateZ(17deg);
    }
}
@-webkit-keyframes slideOutLeft {
    to {
        -webkit-transform: translateX(-100%);
    }
}
@-webkit-keyframes rotateOutNewspaper {
    to {
        -webkit-transform: translateZ(-3000px) rotateZ(360deg);
        opacity: 0;
    }
}
@-webkit-keyframes scaleUp {
    from {
        opacity: 0.3;
        -webkit-transform: scale(0.8);
    }
}
@-webkit-keyframes slideInRight {
    from {
        -webkit-transform:translateX(100%);
    }
    to {
        -webkit-transform: translateX(0);
    }
}
@-webkit-keyframes slideInUp {
    from {
        -webkit-transform:translateY(100%);
    }
    to {
        -webkit-transform: translateY(0);
    }
}
.ng-enter {
    z-index: 8888;
}
.ng-leave {
    z-index: 9999;
}
.hello.ng-enter {
    -webkit-animation: scaleUp 0.5s both ease-in;
}
.hello.ng-leave {
    -webkit-transform-origin: 0% 0%;
    -webkit-animation: rotateFall 1s both ease-in;
}
.list.ng-enter {
    -webkit-animation:slideInRight 0.5s both ease-in;
}
.list.ng-leave {
    -webkit-animation:slideOutLeft 0.5s both ease-in;
}

这里就是基本的CSS3动画定义,没有写其他兼容,这里只针对Chrome。

angular.js提供了ng-enter和ng-leave方法,用于当元素进入、消除时执行动画效果,注意中间无空格。

这样就可以以非常精简的代码实现比较基础的动画效果了

angularjs双向绑定数据input输入多个小数点问题(双向绑定不刷新的问题)

angularjs双向绑定数据input输入多个小数点问题(双向绑定不刷新的问题)

1.引入ChangeDetectorRef组件

import {ChangeDetectorRef} from ''@angular/core''; constructor(public changeDetectorRef:ChangeDetectorRef) {}

2.页面代码

<input  type="text" placeholder="0.00" \[(ngModel)\]="item.TMP\_STOCK" (ngModelChange)="inputRule(''stock'',$event)"/>

3.当输入框发生改变时执行下列方法

//当ngModel发生改变时触发方法 
inputRule(name, event) { 
    //当输入框输入1...系统默认认为只有1.此时ngModel不发生任何改变所以这时候需要我们手动进行改变 
    this.item.TMP\_STOCK = null; 
    //detectChanges() - 从该组件到各个子组件执行一次变化检测
    this.changeDetectorRef.detectChanges(); 
    //最后给ngModel赋值 
    this.item.TMP\_STOCK = this.pubtool.numRule(event); 
}

Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)

Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)

我在整理javascript高级程序设计的笔记的时候看到面向对象设计那章,讲到对象属性分为数据属性和访问器属性,我们平时用的js对象90%以上都只是用到数据属性;我们向来讲解下数据属性和访问器属性到底是什么?

数据属性:数据属性包含一个数据值的位置,在这个位置可以读取和写入值.

访问器属性:访问器属性不包含数据值;他们包含一对getter和setter函数在读取访问器属性时,会调用getter函数,这个函数负责返回有效的值,在写入访问器属性时,会调用setter函数并传入新值.

这里介绍的重点是访问器属性,设置对象的访问器属性只能用es5的Object.defineProrerty()方法,如下例子:

var book={
_year:2004,
edition:1
};
Object.defineProperty(book,"year",{
get:function () {
return this._year
},
set:function (newValue) {
if(newValue>2004){
this._year=newValue;
this.edition+=newValue-2004;
}
}
});
book.year=2005;
alert(book.edition);//2
console.log(book.year);//2005
登录后复制

也就是当执行book.year=2005的时候其实是执行了year中的set方法,当执行book.year的时候执行了year的get方法;

立即学习“前端免费学习笔记(深入)”;

var book={
_year:2004,
edition:1
};
Object.defineProperty(book,"year",{
get:function () {
console.log("year get")
return this._year
},
set:function (newValue) {
console.log("year set")
if(newValue>2004){
this._year=newValue;
this.edition+=newValue-2004;
}
}
});
book.year=2005;
alert(book.year);
登录后复制

控制台的提示是:

22.png

这个原理就是vue双向数据绑定的原理,我们在vue组件中的data声明属性数据的时候其实在对象中的已经将这个属性封装成了访问器属性.

22.png

每个属性都有get和set方法,在做双向的数据的控制都在get和set方法中,因为无论你是在ready(2.0是mounted了)或是在view中改变值都会触发set方法,将新值复制进去,在重新在view中匹配值,当然你们有更复杂的控制操作,get方法着是让ready中获取的这个属性值一直保存最新值.

angular1的双向数据绑定是脏数据监测,简单点说就是监测新值和旧值有没有变化,这种方式就要定时监测了咯.两种性能的消耗感觉不在一个层次上的啊.

就好比用html5 Sockets做后台主动消息推送前端和用js定时器每个5秒发送请求到后台捕获消息的性能差距一样.

一直以为vue的data层其实就是个摆设,但在api发现computed属性之后data层完全可以实现发送ajax取数功能,没必要在全都放到ready(2.0是mounted了)里面,这个ready(2.0是mounted了)可以只负责数据格式出来,或者控制页面的动态效果而已.这js的结构就像后台MVC那样层次功能分明清晰.这也只是我突然想到的思路还没真正应用到实际项目中,只是给在用vue的朋友提供个思路.

import data from &#39;../assets/js/data&#39;
export default{
data(){
return{
menu:data.menu,
inde:"",
row:"",
clomu:""
}
},
computed:{
isfull:function () {
alert(111);
return 11;
}
},
mounted(){
},
methods:{
domclick:function (i) {
if(this.inde===i){
this.inde="";
}else {
this.inde = i;
}
},
subclick:function (i,o) {
this.row=i;
this.clomu=o;
}
}
}
登录后复制

关于Vue.js双向绑定实现详解vue.js 双向绑定的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于4.vue 的双向绑定的原理是什么?_vue双向绑定底层原理、angular.js双向数据绑定实现动画特效、angularjs双向绑定数据input输入多个小数点问题(双向绑定不刷新的问题)、Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)等相关内容,可以在本站寻找。

本文标签: