zoukankan      html  css  js  c++  java
  • 在Vue.js应用程序中使用Ionic 4组件

    原文:https://alligator.io/vuejs/vue-ionic/

    js正以各种正确的理由受到欢迎,Vue和先进的Web应用程序的结合前景光明。Ionic是一个处于结合移动优先用户体验(mobile first UX)前沿的web框架,尽管它目前由Angular 5.x提供支持,但该团队的新Stencil编译器允许Vue.js使用与Ionic 4相同的web组件。

    Ionic4目前处于alpha中,不应用于生产,但尽管如此,这是一个伟大的思想实验,并深入探讨了Stencil的优点以及Web组件对于与框架无关的UI组件的意义。

    要开始,请使用Vue CLI创建一个新的Vue项目:

    # 安装 Vue CLI
    $ npm install vue-cli
    
    # 创建一个新的 Vue 项目
    $ vue init webpack-simple vue-ionic
    
    # 进入刚创建的目录
    $ cd vue-ionic
    
    # 添加 vue-router 和 axios
    $ npm install vue-router axios
    
    # 运行 开发服务器
    $ npm run dev

     

    REST API

    我们可以使用json-sever创建一个本地REST API,它允许我们轻松地从服务器获取(GET)或发布(POST)todos 到服务器 。如果尚未安装,请在计算机上全局安装:

    $ npm install json-server -g

    服务器可以启动并带一个JSON序列化数据库。在项目根目录中创建一个名为db.json的文件:

    {
      "todos": [
        {
          "id": 1,
          "name": "Make awesome applications"
        },
        {
          "id": 2,
          "name": "Play squash"
        },
        {
          "id": 3,
          "name": "Deadlift"
        },
        {
          "id": 4,
          "name": "Squat"
        }
      ]
    }
    

      

    通过在终端中运行以下命令启动API:

    $ json-server db.json --watch --port 3001
    

    现在我们已经有了一个API并在运行,让我们添加 Ionic!

    添加 Ionic

     要在项目中添加Ionic的alpha版本,请将以下脚本添加到index.html文件中:

    <script src="https://unpkg.com/@ionic/core@0.0.2-30/dist/ionic.js"></script>

    您可以在这里找到当前版本的Ionic core: https://www.npmjs.com/package/@Ionic/core

    同时,确保您有适当的响应元标记:

    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    

      

    路由

    然后,我们可以设置两条允许查看todo项或添加todo项的路由:

    import Vue from 'vue'
    import VueRouter from 'vue-router';
    
    import TodoList from './components/TodoList';
    import AddTodoItem from './components/AddTodoItem';
    
    Vue.use(VueRouter);
    
    const routes = [
      { path: '', redirect: '/todos'},
      { path: '/todos', component: TodoList },
      { path: '/todos/add', component: AddTodoItem}
    ]
    
    export default new VueRouter({ routes })

    然后,将路由配置添加到main.js中的主Vue实例:

    import Vue from 'vue'
    import App from './App.vue'
    
    import router from './router'
    
    new Vue({
      el: '#app',
      router,
      render: h => h(App)
    })
    

      

    Ionic Web Component

    由于Ionic4.x是使用Web Component构建的,我们需要告诉Vue, Ionic组件不是Vue组件。在main.js中,添加以下忽略所有Ionic元素的配置对象:

    Vue.config.ignoredElements = [/^ion-/]
    

    在App.vue内部,我们现在可以添加<router view>并将其包含在<ion App>组件中。这是用来包含我们所有的Ionic 组件:

    <template>
      <ion-app>
        <router-view></router-view>
      </ion-app>
    </template>
    

      

    Todo List

    要创建我们在router.js中注册的todo列表页,请在src/components文件夹中创建一个名为todo list.vue的文件。

    在我们创建的钩子中,我们从API捕获todo并将它们分配给todos数组。

    import axios from 'axios';
    
    export default {
      data() {
        return {
          todos: []
        }
      },
      methods: {
        addTodo() {
          this.$router.push({path: '/todos/add'})
        }
      },
      created() {
        axios.get('http://localhost:3001/todos')
          .then(res => this.todos = res.data)
      }
    }
    

      然后我们可以添加一个模板,这个模板看起来肯定与以前使用过Ionic的任何模板相似:

    <template>
      <ion-page>
        <ion-header>
    
          <ion-toolbar class="toolbar-md-primary">
            <ion-title>TodoList</ion-title>
          </ion-toolbar>
    
        </ion-header>
        <ion-content class="content">
    
          <ion-list>
            <ion-item v-for="todo in todos" :key="todo.id">
              
            </ion-item>
          </ion-list>
    
          <ion-fab-button class="todo-fab" @click="addTodo">
            <ion-icon name="add"></ion-icon>
          </ion-fab-button>
        </ion-content>
      </ion-page>
    </template>
    

      

    我们将组件包装在一个ion-page元素中。这样我们就可以定义一个标题和工具栏,使我们能够显示一个导航栏。
    接下来,我们可以在一个ion-content元素中显示列表,并将todos数组中的每个项作为一个ion-item进行迭代。
    给我们的fab按钮加样式并添加一些内边距。我们将在两个组件中同时使用这两个类,因此我们添加一个style.css文件和适当的类:

    .todo-fab {
      position: fixed;
      bottom: 25px;
      right: 15px;
      font-size: 30px;
    }
    
    .content {
      padding: 10px 10px 10px 0px
    }
    

      

    This gives us the following这给了我们以下结果 :

     

    当用户单击FAB按钮时,它们将导航到Add Todo页面。让我们在components/AdddoItem创建它:

    <template>
      <ion-page>
        <ion-header class="toolbar-md-primary">
    
          <ion-toolbar>
            <ion-title>Add Item</ion-title>
          </ion-toolbar>
    
        </ion-header>
        <ion-content class="content">
    
          <ion-item>
            <ion-input :value="name" ref="newTodoItem" @input="updateTodoName" placeholder="Todo Name"></ion-input>
          </ion-item>
    
          <ion-fab-button class="todo-fab" @click="addTodo">
            <ion-icon name="checkmark"></ion-icon>
          </ion-fab-button>
    
        </ion-content>
      </ion-page>
    </template>
    

      

    我们的标记看起来很相似,但这次我们使用的是ion-input。要获取新todo项的值,我们使用ref和input事件。

    import axios from 'axios';
    
    export default {
      data() {
        return {
          name: ''
        }
      },
      methods: {
        addTodo() {
          const newTodo = { name: this.name }
          axios.post('http://localhost:3001/todos', newTodo)
            .then(res => {
              this.$router.push({path: '/todos'})
            })
        },
        updateTodoName() {
          this.name = this.$refs.newTodoItem.value
        }
      }
    }
    

      这个页面的代码也非常类似,每当有人点击Fab按钮时,我们使用AXIOS添加一个新的ToDo项目到API。

    这是结果 :

    原文发表日期: 一月 16, 2018

    喜欢的话,请点赞,转发、收藏、评论,谢谢!
  • 相关阅读:
    雷林鹏分享:jQuery EasyUI 数据网格
    雷林鹏分享:jQuery EasyUI 数据网格
    雷林鹏分享:jQuery EasyUI 数据网格
    雷林鹏分享:jQuery EasyUI 数据网格
    雷林鹏分享:jQuery EasyUI 数据网格
    雷林鹏分享:jQuery EasyUI 数据网格
    雷林鹏分享:jQuery EasyUI 数据网格
    关于elisp中一些含有'p'的符号
    how elisp works
    elisp 错误提示
  • 原文地址:https://www.cnblogs.com/johnjackson/p/12167756.html
Copyright © 2011-2022 走看看