vue学习资料一(入门、插值、双向绑定)

VUE

构建数据驱动的web界面的库,技术上重点在于MVVM的ViewModel层
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<div>{{msg}}</div>
    <script src="vue.js"></script>
    <script>
    var data = {
        msg: 'hello'
    }
    new Vue({
        el:'div',
        data:data
    })
    </script>
</body>
</html>

如果要改变显示内容

data.msg = 'world'
data.msg = '瑞源先生'

插值

语法: {{key}}
将数据中的数据同步到页面中的过程;

var data = {
        msg:'欧走不力大后天呢 色'
    }
    var demo = new Vue({
        el:'.my-app',
        data:data
    })

不仅仅可以还可以插在Dom节点内容中,还可以插入到属性中:

<div id="app" class="my-app"><span data-id="{{id}}" style={{styles}}>关注</span>{{msg}}</div>

<script src="vue.js"></script>
<script>
var data = {
    msg:'瑞源先生早上好',
    styles:"color:orange",
    id:20
}
var demo = new Vue({
    el:'.my-app',
    data:data
})

如果我想更改其中一个,可以在后面接着写:


data.styles= 'color:green'

关注的颜色就从橘黄色变成了绿色;

单次插值

  • 数据插入页面中,不能再次修改;
###如果我们不想让初始值(只想插值一次)发生变化,我们可以在key前面加上一个 * ,{{ *key}}
<div id="app" class="my-app"><span data-id="{{id}}" style={{*styles}}>关注</span>{{msg}}</div>

这样就一直是橘黄色了;

同样的案例

  • 修改文案内容:
data.msg = '瑞源学堂欢迎您!'
- 如果不想修改初始文案的内容(只想插值一次)我们同样可以在key前面加上一个*,{{*key}},
<div id="app" class="my-app"><span data-id="{{id}}" style={{styles}}>关注</span>{{*msg}}</div>

这样文案内容就不会发生变化;

标签过滤

语法{{{key}}},将数据中的html标签渲染到页面中;

  • 我们想在文案中插入一个标签,把“瑞源先生早上好!”改成“【深圳】瑞源先生在上好!”,【深圳】单独用一个标签包裹,加粗;
var data = {
        msg:'<strong>【深圳】</strong> 瑞源先生早上好!',
        styles:"color:orange",
        id:20
    }

这样页面会把<strong></strong>标签显示出来;
我们需要这样操作:

<div id="app" class="my-app"><span data-id="{{id}}" style={{styles}}>关注</span>{{{*msg}}}</div>

这样就可以了;

插值表达式

插值的过程中,我们可以对插入的数据做运算处理,或调用某些js方法;

  • 如果我们想在id数值面前渲染一个人民币的符号¥
<div id="app" class="my-app">{{'¥' + id}}</div>
var data = {
    id:20
}
var demo = new Vue({
    el:'.my-app',
    data:data
})

¥20就渲染出来了

  • 我们还可以在{{里面进行运算处理}},我们可以进行加减乘除,字符串拼接,对数据进行js方法的调用;
  • 在里面执行的运算也是要遵循运算符的优先级;
<div id="app" class="my-app">{{'¥' + id * 2 }}</div>

结果为¥40

<div id="app" class="my-app">{{'¥' + id * 2 }}<span>{{styles}}</span></div>

var data = {
    styles:'color:orange',
    id:20
}

页面渲染为: ¥40color:green

  • 如果我们想要color:green为大写
<div id="app" class="my-app">{{'¥' + id * 2 }}<span>{{styles.toUpperCase()}}</span></div>

输出为:¥40COLOR:GREEN

插值过滤器

语法{{ key | filter }}
VUE.JS的9289行为我们提供一些内置的过滤器,我们可以直接对插值调用,
比如我们要对数据id:40的值渲染变成美元$40

<div id="app" class="my-app">{{id | currency}}</div> 
var data = {
    styles:'color:orange',
    id:40
}
var demo = new Vue({
    el:'.my-app',
    data:data
})

页面渲染为:$40.00

{{id * 3 | currency}}

页面渲染为: $120.00

{{id | currency '¥'}} 可以使$符号转换为人民币¥符号

  • 过滤器提供了哪些方法?

    • json
    • capitalize
    • uppercase
    • lowercase
    • currency
    • pluralize
    • debounce
  • 大写转换:uppercase

<div id="app" class="my-app">{{id * 3 | currency}}
    <p>{{styles | uppercase}}</p>
</div> 

COLOR:GREEN

  • 小写转换:lowercase
<p>{{tips | lowercase}}</p>
var data = {
    styles:'color:orange',
    tips:'HEllo,WORLd!',
    id:40
}

hello,world!

  • 首字母大写 capitalize
  • 渲染json格式 json

下面两个可以先跳过,待学了更多知识(v-for,methods等)再回头来学习

  • pluralize

功能: 如果只有一个参数,复数形式只是简单地在末尾添加一个 “s”。如果有多个参数,参数被当作一个字符串数组,对应一个、两个、三个…复数词。如果值的个数多于参数的个数,多出的使用最后一个参数。
参数:{String} single, [double, triple, ...

<div class="test">
{{message}}    {{message | pluralize 'item'}} <!--输出: 1 item-->
    <ul v-for="item in lili">
        <li>
            {{item}}    {{item | pluralize 'item'}} <!--输出: 1    item 2    items 3    items-->
        </li>
    </ul>
    <ul v-for="item in lili">
        <li>
            {{item}}    {{item | pluralize 'st' 'rd'}} <!--输出: 1    st 2    rd 3    rd-->
        </li>
    </ul>
    <ul v-for="item in man">
        <li>
            {{item}}    {{item | pluralize 'item'}} <!--输出: 1    item 2    items 3    items-->
        </li>
    </ul>
    <ul v-for="item in man">
        <li>
            {{item}}    {{item | pluralize 'st' 'rd'}} <!--输出: 1    st 2    rd 3    rd-->
        </li>
    </ul>
</div>
<script type="text/javascript">
    var myVue = new Vue({
        el: ".test",
        data: {
            message: 1,
            lili: [1,2,3],
            man: {
                name1: 1,
                name2: 2,
                name3: 3
            }
        }
    })
</script>
  • debounce

(1)限制: 需在@里面使用
(2)参数:{Number} [wait] - 默认值: 300
(3)功能:包装处理器,让它延迟执行 x ms, 默认延迟 300ms。包装后的处理器在调用之后至少将延迟 x ms, 如果在延迟结束前再次调用,延迟时长重置为 x ms。

<div class="test">
    <button id="btn" @click="disappear | debounce 10000">点击我,我将10秒后消失</button>
</div>
<script type="text/javascript">
    var myVue = new Vue({
        el: ".test",
        methods: {
            disappear: function () {
                document.getElementById("btn").style.display= "none";
            }
        }
    })
</script>

动态插值

  • 在插入的过程中,动态的对值进行修改;
    语法:
    computed:{
        key:function(){
            return newKey
        }
    }

示例:

<div id="app" class="my-app">
    <p>{{result}}</p>
    <p>{{result | currency}}</p>
</div> 

var demo = new Vue({
    el:'.my-app',
    computed:{
        result:function(){
            return 40
        }
    }
})

页面渲染为
40
$40.00

  • 我们来看看result这个函数内的作用域是什么,console.log(this)
var demo = new Vue({
    el:'.my-app',
    computed:{
        result:function(){
        console.log(this)
            return 40
        }
    }
})
  • this就是Vue实例化对象,在里面能找到result,值为40,function就是在实例化对象上执行,可以访问Vue对象上的属性;
  • 可以应用表达式过滤器;

来实现一个输入框的值显示的小例子:(非V-方法)

<div id="app">
    <input type="text" id="inp">
    <span>{{result}}</span>
</div>

<script src="vue.js"></script>

<script>
    var demo = new Vue({
        el:"#app",
        data:{
            value:0
        },
        computed:{
            result:function(){
                return this.value * 2
            }
        }
    })
    // 当input输入完之后获取它的值,更新demo的value属性
    document.getElementById('inp').onkeyup = function(e){
        //获取输入框里面输入的值
        var val = e.target.value;
        //赋值给demo下的value
        demo.value = val;
    }
</script>

此时在输入框输入数字就会在后面实时显示结果

数据的双向绑定

  • vue提供了v-model="",属性值是与vue中绑定数据中的数据;
  • 当视图中一些操作,会修改到vue中的数据,同样,vue的数据被修改时会映射到视图中
<div id="app">
    <input type="text" id="inp" v-model="value">
    <span>{{result | currency}}</span>
</div>
<script src="vue.js"></script>

<script>
var demo = new Vue({
    el:"#app",
    data:{
        value:0
    },
    computed:{
        result:function(){
            return this.value
        }
    }
})
</script>

这样我们也实现了上面一个例子中的双向绑定;

  • 以后我们会用到更多的v- 开头的属性;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容