初识前端笔记之二

使用 v-html 指令用于输出 html 代码
v-html 指令

<div id="app">
<div v-html="message"></div>
</div>

<script>
  new Vue({
  el: '#app',
  data: {
  message: '<h1>菜鸟教程</h1>'
}
})
</script>

html几个重要标签用法(div,p,span,ul,li,dl,dt,dd,a,img,h,strong,em)

一段时间以来,发现有很多人XHTML都不会用,不光是普通的初学者,有的程序员都不是很清楚该怎么写这个XHTML,我这里呢算是把一些常见的应用问题做一个总结,也算能使得大家能在沟通,合作上能形成默契。

XHTML里有很多的标签,但是经常用到的也就是那么几个,也只要掌握这几个也就可以了。下面我们一一列举:div,p,span,ul,li,dl,dt,dd,a,img,h,strong,em

div 在我的脑子里我一直把他想作是一个瓶子或是箱子,我的感觉它挺硬的。这个div没有什么特性的意义,可以使用在很多地方,也就是说他可以装不同的东西。他的正确的写法是< div> < /div> 必需要有封口。大家都用来做布局之用,也有用来作为存放文章形成段落,实际上,这个做法并不是很好,因为作为文章的分段自然有一个特定的标签来用。那就是下面要讲的< p> < /p> 标签,不过用DIV来再整体的包住所有的段落。这是非常实用的。

p 这是一个有特定语义的标签,表示段落,是用来区分段落的。在大部分的浏览器中对P基本上都有一个上下的边距。但是没有行首缩进,因为行首缩进只是表示段落的方式但是不是一定或是必需的。所以在用P标签的时候如果需要可以针对P设定一下行首缩进,我是推荐在文章以外的地方不要使用P,因为P是有一定语义的,如果用在别的地方恐不合适。正确的写法是< p> < /p>

span 这也是一个非常常用的标签,这个标签可以说与div很像,没有什么特定的意义,只是他是一个级联元素,不是块级元素。我一直把它看作是一个袋子,他不像箱子那样可以有自己的宽高,他的宽高只能随着内容的多少而定,所以很像是袋子。这个标签与div正好互补。

ul,li 这是一个列表,在列表中,除了UL还OL,不过我觉得OL有点像是鸡肋。因为UL通过CSS定义一样可以有OL的数字排序效果。所以一般我不推荐使用 OL,有UL就可以了。UL是块级的,他的子级li也是块级标签。正确的写法是< ul> < li> < /li> < /ul> LI标签是被UL标签包裹的,在UL标签里可以有无数个LI标签,LI标签不能独立使用。并且LI标签一定要封口,这不光是美观问题,对于后期的维护也很有好处。很多程序员都不喜欢把这个LI封口。UL列表的用处主要是列举出一维的,同一类型的数据。具体的比如使用在菜单上,文章中列数的一些条例等等。在列表中有一种特别的形式与UL是不一样的。那就是下面的DL

dl,dt,dd 这是一个很特别的三个标签的组合。这里的DT是指标题,DD是指内容。DL是包课他们的容器。正确的写法是< dl> < dt> < /dt> < dd> < /dd> < /dl> 在DL里可以有很多组的DT,DD,当出现很多组的时候尽量是一个DT配一个DD,如果DD中内容很多,可以在DD里加P标签配合使用。DL列表是一个非常好的列表形式,可以多加利用。

a 这表示链接,是一个特定属性的,也是网页中最为神奇的标签。因为它才让无数的网页都连在了一起。正确的写法是:< a href=" " title=" " > < /a> 其中的href是表示目标地址,TITLE是鼠标悬停提示文字,这是可有可无的。但是有必是利大于无。

img 这是图片标签,也是个特定属性的标签。正常写法是:< img src=" " alt=" " title=" " /> 这里的src是目标地址,ALT与TITLE是替换文字,ALT是 IE特定的,TITLE是其它浏览器的通用的。不过记得后面的反斜线那是一定要有的。

H 这是一个系列的标签,从H1到H6,一共六个,有人说太少了,有人说正好用,有人说用不了这么多。反正我是觉得差不多。正确写法是:< h> < /h> 主要是用来存放标题,也有一些朋友用来作它用,个人觉得这个标签还是让他安生一点,就让他做标题的作用。这六个标签之间最好不要出现什么相互包含的事。

strong 这个意思是着重,这是有语义的,作用也很简单。至于样工,是加粗着重,还是用色彩表明着重,那都是自行选择。正确的写法是< strong> < /strong>

em 这个与strong很像,是表示强调。一般浏览器的默认值是斜体。使用方式与strong一样。写法是:< em> < /em>

  1.  v-bind:class  
    

class 与 style 是 HTML 元素的属性,用于设置元素的样式,我们可以用 v-bind 来设置样式属性

  <div id="app">
  <div v-bind:class="{ 'active': isActive }"></div>
  </div>

  <script>
  new Vue({
  el: '#app',
  data: {
  isActive: true
  }
})
  </script>
<style>
.active {
width: 100px;
height: 100px;
background: green;
}
</style>  // 相当于 <div class="active"></div>

②我们也可以在对象中传入更多属性用来动态切换多个 class 。

<div class="static"
 v-bind:class="{ 'active' : isActive, 'text-danger' : hasError }">
</div>

③我们也可以直接绑定数据里的一个对象:

  <div id="app">
  <div v-bind:class="classObject"></div>
  </div>

  <script>
  new Vue({
  el: '#app',
  data: {
  classObject: {
  active: true,
  'text-danger': true
}
  }
})
</script>
<style>
.active {
width: 100px;
height: 100px;
background: green;
}
.text-danger {
background: red;
 }
</style>

④绑定返回对象的计算属性。这是一个常用且强大的模式:

 <style>
.base {
  width: 100px;
  height: 100px;
}

.active {
   background: green;
}

.text-danger {
  background: red;
}
</style>
<div id="app">
<div v-bind:class="classObject"></div>
</div>
<script>

new Vue({
el: '#app',
data: {
isActive: true,
error: {
  value: true,
  type: 'fatal'
}
},
computed: {
classObject: function () {
  return {
base: true,
    active: this.isActive && !this.error.value,
    'text-danger': this.error.value && this.error.type === 'fatal',
  }
}
}
})
</script>

⑤ 我们可以把一个数组传给 v-bind:class

<style>
.active {
width: 100px;
height: 100px;
background: green;
}
 .text-danger {
background: red;
}
</style>
<div id="app">
<div v-bind:class="[activeClass, errorClass]"></div>
</div>

<script>
new Vue({
el: '#app',
data: {
activeClass: 'active',
errorClass: 'text-danger'
}
})
</script>

⑥还可以使用三元表达式来切换列表中的 class :
errorClass 是始终存在的,isActive 为 true 时添加 activeClass 类:

<div v-bind:class="[errorClass ,isActive ? activeClass : '']"></div>

v-bind:style (内联样式)
① 我们可以在 v-bind:style 直接设置样式:

<div id="app">
<div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">菜鸟教程</div>
</div>

v-bind
v-bind:value
v-model
v-bind:id(<div v-bind:id="'list-' + id">菜鸟教程</div>)
② v-bind:style 可以使用数组将多个样式对象应用到一个元素上:

<div id="app">
<div v-bind:style="[baseStyles, overridingStyles]">菜鸟教程                </div>
</div>

③ 也可以直接绑定到一个样式对象,让模板更清晰:

<div id="app">
<div v-bind:style="styleObject">菜鸟教程</div>
</div>

注意:当 v-bind:style 使用需要特定前缀的 CSS 属性时,如 transform ,Vue.js 会自动侦测并添加相应的前缀。

5
<pre><a v-bind:href="url">菜鸟教程</a></pre> // 这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定
v-on 指令,它用于监听 DOM 事件:

  <a v-on:click="doSomething"> // 在这里参数是监听的事件名。
    
  <div id="app">
<p>{{ message }}</p>
<button v-on:click="reverseMessage">反转字符串</button>
</div>

  <script>
  new Vue({
    el: '#app',
    data: {
      message: 'Runoob!'
    },
    methods: {
      reverseMessage: function () {
      this.message = this.message.split('').reverse().join('')
    }
    }
  })
    </script>

修饰符是以半角句号 . 指明的特殊后缀,用于指出一个指令应该以特殊方式绑定。例如,.prevent 修饰符告诉 v-on 指令对于触发的事件调用 event.preventDefault():********************************

<form v-on:submit.prevent="onSubmit"></form>

过滤器

v-bind 缩写

<!-- 完整语法 -->
<a v-bind:href="url"></a>
<!-- 缩写 -->
<a :href="url"></a>

v-on 缩写

<!-- 完整语法 -->
<a v-on:click="doSomething"></a>
<!-- 缩写 -->
<a @click="doSomething"></a>

methods 和 computed,效果上两个都是一样的,但是 computed 是基于它的依赖缓存,只有相关依赖发生改变时才会重新取值。而使用 methods ,在重新渲染的时候,函数总会重新调用执行,可以说使用 computed 性能会更好,但是如果你不希望缓存,你可以使用 methods 属性。

    computed: {
    // 计算属性的 getter
    reversedMessage: function () {
     // `this` 指向 vm 实例
    return this.message.split('').reverse().join('')
    }
    }
    
  methods: {
  reversedMessage2: function () {
  return this.message.split('').reverse().join('')
  }
  }

computed 属性默认只有 getter ,不过在需要时你也可以提供一个 setter :

var vm = new Vue({
el: '#app',
data: {
name: 'Google',
url: 'http://www.google.com'
},
computed: {
site: {
  // getter
  get: function () {
    return this.name + ' ' + this.url
  },
  // setter
  set: function (newValue) {
    var names = newValue.split(' ')
    this.name = names[0]
    this.url = names[names.length - 1]
  }
}
}
})
// 调用 setter, vm.name 和 vm.url 也会被对应更新
vm.site = '菜鸟教程 http://www.runoob.com';
document.write('name: ' + vm.name);
document.write('<br>');
document.write('url: ' + vm.url);

从实例运行结果看在运行 vm.site = '菜鸟教程 http://www.runoob.com'; 时,setter 会被调用, vm.name 和 vm.url 也会被对应更新。

  1. 监听
    实例一

    <div id = "app">
    <p style = "font-size:25px;">计数器: {{ counter }}</p>
    <button @click = "counter++" style = "font-size:25px;">点    我</button>
    </div>
    <script type = "text/javascript">
    var vm = new Vue({
    el: '#app',
    data: {
    counter: 1
    }
    });
    vm.$watch('counter', function(nval, oval) {
    alert('计数器值的变化 :' + oval + ' 变为 ' + nval + '!');
    });
    </script>
    

实例二

  <div id = "computed_props">
千米 : <input type = "text" v-model = "kilometers">
米 : <input type = "text" v-model = "meters">
</div>
<p id="info"></p>
<script type = "text/javascript">
var vm = new Vue({
el: '#computed_props',
data: {
    kilometers : 0,
    meters:0
},
methods: {
},
computed :{
},
watch : {
    kilometers:function(val) {
        this.kilometers = val;
        this.meters = this.kilometers * 1000
    },
    meters : function (val) {
        this.kilometers = val/ 1000;
        this.meters = val;
    }
}
});
// $watch 是一个实例方法
vm.$watch('kilometers', function (newValue, oldValue) {
// 这个回调将在 vm.kilometers 改变后调用
document.getElementById ("info").innerHTML = "修改前值为: " + oldValue + ",修改后值为: " + newValue;
})
</script>

!!!!!
// $$watch是一个实例对象
vm.$watch('监听参数', function(nval, oval) {
});
watch : {
kilometers:function(val) {
this.kilometers = val;
this.meters = this.kilometers * 1000
},
meters : function (val) {
this.kilometers = val/ 1000;
this.meters = val;
}
} 这个两者写法区别.

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