zoukankan      html  css  js  c++  java
  • MVVM前端框架

    早开始接触MVVM框架的时候,是在学习WPF的时候,后面陆陆续续接触到了很多的前端JS框架,个人觉得大同小异,也没有去研究源代码,所以都停留在使用的阶段。当然对于我来说,使用这些JS框架,最关注的无非就是通过前端JS代码获取后台数据,然后绑定到HTML页面上了。

    今天是星期六,花点时间整理了一下AngularJs,与VueJs以及KnockoutJs的简单使用。也可以做一下小小的对比。那么,废话不多说,直接上代码。

    本文示例,后台数据通过Asp.Net Web Api提供,前端代码异步请求数据的时候,涉及到跨域的问题,不在这里讨论,跨域的问题已经在Api中配置允许跨域。

    AngualrJs简介:

    AngularJS 是一个 JavaScript 框架。它可通过 <script> 标签添加到 HTML 页面。

    AngularJS 通过 指令 扩展了 HTML,且通过 表达式 绑定数据到 HTML。

    注意:angularjs中字符串转json对象的方法 angular.fromJson(response.data);以及异步请求的方法:$http.get("http://10.101.98.197:8080/api/lazyorders/getcategorys")

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <script src="angular.min.js"></script>
    <style>
    table, th , td  {
      border: 1px solid grey;
      border-collapse: collapse;
      padding: 5px;
    }
    table tr:nth-child(odd) {
      background-color: #f1f1f1;
    }
    table tr:nth-child(even) {
      background-color: #ffffff;
    }
    </style>
    </head>
    <body>
    <div ng-app="myApp" ng-controller="categorysCtrl">
     <div>{{categorys}}</div>
     <table>
      <tr ng-repeat="x in categorys">
        <td>{{ x.CategoryId }}</td>
        <td>{{ x.CategoryName }}</td>
      </tr>
    </table>
    </div>
     
    <script>
    var app = angular.module('myApp', []);
    app.controller('categorysCtrl', function ($scope, $http) {
        $http.get("http://10.101.98.197:8080/api/lazyorders/getcategorys")
       .then(function (response) {
           $scope.categorys = angular.fromJson(response.data);
           //$scope.categorys = JSON.Parse(response.data);
       });
    });
    </script>
    </body>
    </html>

    运行效果图:

    VueJs简介:

    Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架。

    Vue 只关注视图层, 采用自底向上增量开发的设计。

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

     注意:以下代码演示了两种异步请求的方法,

    一种是引入<script src=" vue-resource.min.js"></script>通过this.$http.get方法发起请求

    一种是引入<script src="jquery-1.4.1.min.js"></script>通过$.ajax方法发起请求,不管用哪种方法,原理都是通过XMLHttpRequest对象发起的请求,只是各自有各自的封装而已。

    另外需要提一下的就是VueJs的实例生命周期钩子:https://cn.vuejs.org/v2/guide/instance.html#%E5%AE%9E%E4%BE%8B%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E9%92%A9%E5%AD%90

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <script src="jquery-1.4.1.min.js"></script>
        <script src="vue.min.js"></script>
        <script src=" vue-resource.min.js"></script>
        <style>
            table, th, td
            {
                border: 1px solid grey;
                border-collapse: collapse;
                padding: 5px;
            }
            table tr:nth-child(odd)
            {
                background-color: #f1f1f1;
            }
            table tr:nth-child(even)
            {
                background-color: #ffffff;
            }
        </style>
    </head>
    <body>
        <div id="app">
            <div>
                {{categorys}}</div>
            <table>
                <tr v-for="x in categorys">
                    <td>
                        {{x.CategoryId}}
                    </td>
                    <td>
                        {{x.CategoryName}}
                    </td>
                </tr>
            </table>
        </div>
        <script type="text/javascript">
                  var vum = new Vue({
        el:"#app",
        data:{
            categorys:""
        },
    //    created () {
    //          $.ajax({
    //            url:"http://10.101.98.197:8080/api/lazyorders/getcategorys",
    //            type:"get",
    //            dataType:"json",
    //            success:function(result){
    //            vum.categorys =JSON.parse(result);
    //            },
    //        })
    //    },
        methods:{
           
        },
        mounted: function () {
        this.$http.get('http://10.101.98.197:8080/api/lazyorders/getcategorys').then(response => {
           vum.categorys =JSON.parse(response.data);
        }, response => {
          console.log("error");
        });
      },
    });
        </script>
    </body>
    </html>

    运行效果图与angularjs一样的:

    KonckoutJs简介:

    Knockout是一款很优秀的JavaScript库,它可以帮助你仅使用一个清晰整洁的底层数据模型(data model)即可创建一个富文本且具有良好的显示和编辑功能的用户界面。任何时候你的局部UI内容需要自动更新(比如:依赖于用户行为的改变或者外部的数据源发生变化),KO都可以很简单的帮你实现,并且非常易于维护。

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <script src="jquery-1.4.1.min.js"></script>
        <script src="knockout.min.js"></script>
        <style>
            table, th, td
            {
                border: 1px solid grey;
                border-collapse: collapse;
                padding: 5px;
            }
            table tr:nth-child(odd)
            {
                background-color: #f1f1f1;
            }
            table tr:nth-child(even)
            {
                background-color: #ffffff;
            }
        </style>
    </head>
    <body>
        <div>
            <div data-bind="text:jsondata">
            </div>
            <table data-bind="foreach:list">
                <tr>
                    <td data-bind="text:CategoryId">
                    </td>
                    <td data-bind="text:CategoryName">
                    </td>
                </tr>
            </table>
        </div>
        <script type="text/javascript">
            var data = [];
            var viewModel = {
                list: ko.observableArray(data),
                jsondata:ko.observable("knockout"),
            };
            ko.applyBindings(viewModel);
            $(function () {
                $.ajax({
                    type: "get",
                    url: "http://10.101.98.197:8080/api/lazyorders/getcategorys",
                    dataType: "json",
                    success: function (res) {
                    viewModel.jsondata(res);
                    viewModel.list(JSON.parse(res));
                    }
                });
            });
        </script>
    </body>
    </html>

    运行效果图:细心的同学肯定已经发现了与前面两张效果图不一样的地方------这里的table中的行的背景色都是奇数行设置的颜色,CSS设置的偶数行背景色没有用。这个我也没有研究出来,可能与生命周期有关吧!感兴趣的同学可以研究一下,研究出来,记得留言告诉我,哈哈~

    每天,进步一点点...

  • 相关阅读:
    关于W3Cschool定义的设计模式--常用的9种设计模式的介绍
    正则得介绍和使用——表单验证
    DOM的高级操作-一种JS控制元素的视觉假象
    如何理解JS中this指向的问题
    Vulkan中的实时软阴影与硬件优化
    TensorFlow Distribution(分布式中的数据读取和训练)
    TensorFlow白皮书
    TensorFlow Data模块
    新闻标签提取的评价方法
    基于TF-IDF的新闻标签提取
  • 原文地址:https://www.cnblogs.com/dwBurning/p/mvvmjsframework.html
Copyright © 2011-2022 走看看