vue.js浅入学习

2017-02-17  本文已影响0人  codingQi

Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件Vue 生态系统支持的库开发的复杂单页应用。

Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定组合的视图组件

刚开始接触,就跟着文档写了一些小的实现demo:
首先,进入工程learn vue/demo/目录下,然后在此目录下新建demo1.html,然后就可以在里面写代码了。
下载vue,我使用npm install来安装vue的,因此就这样引进html文档里:

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

注意:这个要放在html底下的,因为渲染页面是遵循html从上向下依次读取的,如果顺序放错,会出现错误提示。

  1. 声明式渲染
    Vue.js 的核心是一个允许你采用简洁的模板语法来声明式的将数据渲染进 DOM 的系统:
    将数据和 DOM 已经被绑定在一起,所有的元素都是响应式的。
    除了绑定插入的文本内容,还可以通过v-bind来绑定 DOM 元素属性。v-bind 属性被称为指令。指令带有前缀 v-,以表示它们是 Vue.js 提供的特殊属性。
  2. 条件与循环
    v-if
    v-for
  3. 处理用户输入(按钮、表单)
    ·为了让用户和你的应用进行互动,我们可以用 v-on 指令绑定一个监听事件用于调用我们 Vue 实例中定义的方法,如:click。
    ·Vue 也提供了** v-model** 指令,它使得在表单输入和应用状态中做双向数据绑定变得非常轻巧。
  4. 用组件构建(应用)
    组件系统是 Vue.js 另一个重要概念,因为它提供了一种抽象,让我们可以用独立可复用的小组件来构建大型应用。
    在 Vue 里,一个组件实质上是一个拥有预定义选项的一个 Vue 实例:
// Define a new component called todo-item
Vue.component('todo-item', {
    template: '<li>This is a todo</li>'
})

现在你可以在另一个组件模板中写入它:

<ol>
  <!-- Create an instance of the todo-item component -->
  <todo-item></todo-item>
</ol>

但是这样会为每个 todo 渲染同样的文本,我们应该将数据从父作用域传到子组件。那就修改一下组件的定义,使得它能够接受一个 prop
字段:

Vue.component('todo-item', {
  // The todo-item component now accepts a
  // "prop", which is like a custom attribute.
  // This prop is called todo.
  props: ['todo'],
  template: '<li>{{ todo.text }}</li>'
})

现在,就可以使用 v-bind 指令将 todo 传到每一个重复的组件中:

<div id="app-7">
  <ol>
    <!-- Now we provide each todo-item with the todo object    -->
    <!-- it's representing, so that its content can be dynamic -->
    <todo-item v-for="item in groceryList" v-bind:todo="item"></todo-item>
  </ol>
</div>
Vue.component('todo-item', {
    props: ['todo'],
    template: '<li>{{ todo.text }}</li>'
}) var app7 = new Vue({
    el: '#app-7',
    data: {
        groceryList: [{
            text: 'Vegetables'
        },
        {
            text: 'Cheese'
        },
        {
            text: 'Whatever else humans are supposed to eat'
        }]
    }
})

这是一个简单的例子,将应用分割成了两个更小的单元,子元素通过 props 接口实现了与父亲元素很好的解耦。我们现在可以在不影响到父应用的基础上,进一步为我们的 todo 组件改进更多复杂的模板和逻辑。
下面是demo1.html的所有demo代码:

<!DOCTYPE html>
<html>
<head lang="en"> 
<meta charset="UTF-8" /> 
<title></title> 
</head> 
<body> 
<div> 
 <!-- 1111111--> 
 <div id="hello"> 
  <p>{{message1}}</p> 
 </div> 
 <!--2222222--> 
 <div id="hover"> 
  <p v-bind:title="message2"> Hover your mouse over me for a few seconds to see my dynamically bound title!</p> 
 </div> 
 <!-- 控制元素的显示--> 
 <div id="app-3"> 
  <p v-if="seen">you can see me ~~~~</p> 
 </div> 
 <div id="app-4"> 
  <ol> 
   <li v-for="todo in todos"> {{todo.text}} </li> 
  </ol> 
 </div> 
 <div id="app-5"> 
  <p>{{message5}}</p> 
  <button v-on:click="reverseMessage5">reverse message5</button> 
 </div> 
 <div id="app-6"> 
  <p>{{message6}}</p> 
  <input v-model="message6" /> 
 </div> 
 <div id="app-7"> 
  <ol> 
   <li v-for="item in groceryList">{{item.text}}</li> 
   <todo-item v-for="item in groceryList" v-bind:todo="item"></todo-item> 
  </ol> 
 </div> 
</div> 
<script src="./node_modules/vue/dist/vue.js"></script> 
<script type="text/javascript">
      var a1 = new Vue({
          el:'#hello',
          data:{
              message1:'hello good vue!'
          }
      });
      var a2 = new Vue({
          el:'#hover',
          data:{
              message2:"you loaded this page on"  +new Date()
          }
      });
      var a3 = new Vue({
          el:'#app-3',
          data:{
              seen:true
          }
      });
      var a4 = new Vue({
          el:'#app-4',
          data:{
                  todos:[

              {text:'good javascrilpt'},
              {text:'good vue.js'},
              {text:'good applications'}
          ]
      }
      });
      a4.todos.pop();

      var a5 = new Vue({
          el:'#app-5',
          data:{
              message5:'wang qi'
          },
          methods:{
              reverseMessage5:function(){
                  this.message5 = this.message5.split('').reverse().join('');
              }
          }
      });
      var a6 = new Vue({
          el:'#app-6',
          data:{
              message6:'你好啊!!!'
          }
      });

      Vue.component('todo-item',{
          props:['todo'],
          template:'<li>{{todo.text}}</li>'
      });
      var a7 = new Vue({
          el:'#app-7',
          data:{
              groceryList:[
                  { text:'Vegetables'},
                  { text:'Cheese' },
                  { text:'potato' }
              ]
          }
      });
  </script>  
</body>
</html>

持之以恒,一步一个脚印。。。。。。

上一篇下一篇

猜你喜欢

热点阅读