vue.js初学(一) vue的入门编程

1:首先引入vue.js

2:点击事件

<div id='clickVue'>
  <p>{{message}}</p>
  <button v-on:click="reverseMessage">逆转文字</button>
</div>

var app = new Vue({
  el: "#clickVue",
  data: {
    message: 'Hello Vue.js!'
  },
  methods: {
    reverseMessage: function () {
      this.message = this.message.split('').reverse().join('')
    }
  }
})

在reverseMessage方法中,我们更新了应用的状态,但没有操作dom节点,所有的dom操作都由vue来处理,你只需要注意编写底层逻辑。

3:组件化应用构建

(1):在vue里,一个组件本质上是一个有用预定义选项的一个vue实例,在vue中注册组件:

vue.component('todo-item',{

  template: "<li>这是一个正在被注册的组件</li>"

})

现在你可以用它构建另一个组件模板:

<ol>

// 创建一个 todo-item 组件的实例

  <todo-item></todo-item>

</ol>

全部代码如下:

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

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

</head>

<body>

  <div id='componentTest'>

    <todo-item></todo-item>

  </div>

</body>

<script>

//注册模板

Vue.component('todo-item',{

  template: "<li>这是一个模板</li>"

})

var app = new Vue({

  el:'#componentTest'

})

</script>

</html>

上诉代码中:Vue.component()注册一个组件,在vue对象componentTest中,使用了这个组件。运行代码得到:

4:组件的绑定的值从父作用域获取

但是这样会为每个代办项渲染同样的文本,这样看起来并不炫酷,我们应该能将数据从父作用域传到子组件。下面修改一下组件的定义,使之能够接受一个属性。

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="vue.js"></script>
</head>
<body>
  <ol id='componentTest'>
    <todo-item v-for='item in groceryList' v-bind:todo='item'></todo-item>
  </ol>
</body>
<script>
//注册模板
Vue.component('todo-item',{
  props:['todo'],
  template: "<li>{{ todo.text }}</li>"
})
var app = new Vue({
  el:'#componentTest',
  data: {
    groceryList: [
      {
      text: '素材'
      },
      {
      text: '文章'
      },
      {
      text:'单词'
      }
    ]
  }
})
</script>
</html>

代码分析:注册的组件为todo-item,在vue对象conponentTest中引用了这一组件,v-for=' item in groceryList ',是从父作用域(componentTest)中循环取groceryList内的值,并将todo与item绑定,

这样一来 todo.text可以理解为item.text in groceryList,循环取值,每次取到的是 ‘素材’,‘文章’,‘单词’三项。

如果没有{{todo.text}} 而是{{todo}},那么得到的是

整个代码分析:

明确需求:我们需要在todo-item中动态从父作用域获取数据。

首先我们需要在componentTest中引入组件todo-item,于是 我们就在body中写了:

<todo-item></todo-item>

其次 我们需要注册组件:

Vue.componet('todo-item' , {

  template: " <li> {{ activeData }} </li> "

})

现在,我们想要组件todo-item循环显示一组动态数据,而这组数据来自其父作用域,而这个数据又是一组数组。于是,在todo-item组件中 写 v-for = item in groceryList ,此时并把todo绑定给item。

但是 我们需要将groceryList 中的数据循环显示出来,因为groceryList 的数据并不在注册的组件todo-item中,于是写了 v-for = item in groceryList 这样,从groceryList中取数据 ,我们可以通过控制台打印

可以看到 groceryList数据是在模板app中。

在注册todo-item时 我们增加其属性 props:【todo】,这个属性被组件用作了{{todo值}},在模板中 我们用v-bind: todo = item即是把item赋值给todo 那么这样一来item组件里的 {{todo.text}}就等于{{item.text}},所以 组件todo-item就从父作用域中获得到groceryList里的值。

 

我们已经设法将应用分割成了两个更小的单元,子单元通过props接口实现了与父单元的解耦。现在,我们进一步为todo-item组件实现更复杂的模板和逻辑的改进,而且不会影响到父单元。

我们可以想象一个大型应用中,组件的应用模板应该是什么样的

<div id="app">
  <app-nav></app-nav>
  <app-view>
    <app-sidebar></app-sidebar>
    <app-content></app-content>
  </app-view>
</div>

 

与自定义元素的关系

你可能已经注意到 Vue 组件非常类似于自定义元素——它是 Web 组件规范的一部分,这是因为 Vue 的组件语法部分参考了该规范。例如 Vue 组件实现了 Slot API 与 is 特性。但是,还是有几个关键差别:

  1. Web 组件规范仍然处于草案阶段,并且尚无浏览器原生实现。相比之下,Vue 组件不需要任何补丁,并且在所有支持的浏览器(IE9 及更高版本)之下表现一致。必要时,Vue 组件也可以包装于原生自定义元素之内。

  2. Vue 组件提供了纯自定义元素所不具备的一些重要功能,最突出的是跨组件数据流,自定义事件通信以及构建工具集成。

 

转载于:https://www.cnblogs.com/mamimi/p/6951308.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值