zoukankan      html  css  js  c++  java
  • angularJS中-$route路由-$http(ajax)的使用

      后台请求使用的是nodeJS驱动(后面帖代码),很简单的RESTFUL, 页面使用的是bottstarp3.0(懒人神器);

      第一个例子:

      在本地架设NODEJS, angular的所有请求都是请求本地的3000端口,  这个例子展示的是angular用GET请求服务器的list.json, 1.json, 2.json等文件;

      POST请求/0和/id这两个地址:

    运行下面代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>angular</title>
      <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <script src="http://cdn.bootcss.com/jquery/2.1.1/jquery.js"></script>
        <script src="http://cdn.bootcss.com/angular.js/1.3.0-beta.13/angular.min.js"></script>
        <link href="http://cdn.bootcss.com/bootstrap/3.3.1/css/bootstrap.css" rel="stylesheet">
        <!--
        <script src="http://cdn.bootcss.com/underscore.js/1.7.0/underscore-min.js" type="text/javascript"></script>
        -->
        <script src="http://cdn.bootcss.com/angular.js/1.3.0-beta.13/angular-resource.min.js"></script>
        <script src="http://cdn.bootcss.com/angular.js/1.3.0-beta.13/angular-route.min.js"></script>
        
    </head>
    <body ng-app="app">
        <script type="text/javascript">
               var app = angular.module("app",["ngResource",'ngRoute']);
        </script>
        
        <div class="panel panel-default">
            <div class="panel-heading">
    
            </div>
            <div class="panel-body" ng-controller="reso">
                <table class="table">
                    <tr>
                        <td>name</td>
                        <td>age</td>
                    </tr>
                    <tr ng-repeat="i in users">
                        <td> {{i.name}} </td>
                        <td> {{i.age}} </td>
                    </tr>
                </table>
                <button class="btn btn-default" ng-click="update(1)">
                query_1.json
                </button>
                <button class="btn btn-default" ng-click="update(2)">
                query_2.json
                </button>
                <button class="btn btn-danger" ng-click="update(0)">
                GET_0.json
                </button>
                <button class="class btn btn-waring" ng-click="post(0)">
                POST_0.json
                </button>
                <table class="table">
                    <tr ng-repeat="i in msgs">
                        <td class="alert-warning alert"> {{i.id}} </td>
                    </tr>
                </table>
            </div>
        </div>
        <script type="text/javascript">
                                        //所有的依赖都要在外部定义好;
        var app = angular.module("app", ["ngResource",'ngRoute']);
        app.factory('Geek', function($resource) {
            var url = "http://127.0.0.1:3000";
            //直接新建一个REST服务, 相当于提供了一堆请求的合集;
            return $resource(url + "/:id.json", {}, {
                query: {
                    method: "GET",
                    params: {
                        id: "list"
                    },
                    isArray: true
                },
                get : {
                    method : "GET",
                    params : {
                        id : "0"
                    }
                },
                save : {
                    method : "POST",
                    params : {
                        id : "id"
                    }
                }
            });
        });
        app.factory("http",function($http) {
            var url = "http://127.0.0.1:3000";
            return function(search,data) {
               return $http.post(url+search, data);
            };
        });
        function reso($scope, Geek, http, $rootElement) {
            $scope.users = Geek.query();
            //$scope.post = 
            window.root = $rootElement;
            $scope.post = function(id) {
                http("/0").then(function(r){
                    var data = r.data;
                    //var data = JSON.stringify(r.data);
                    //var aEl = angular.element('<div class="alert alert-success" role="alert">'+data+"</div>");
                    //root.append( aEl )
                    $scope.msgs = data.list;
                    x = msgs
                });
                //有加了一个请求数据就报了跨域问题,卧槽;
                //而且请求的方式变成了OPTION,我读书少别逗我啊;
                http("/0",id).then(function(r){
                    var data = r.data;
                });
            };
            
            $scope.update = function(id) {
                Geek.query({
                    id: id
                }).$promise.then(function(r) {
                    $scope.users = r;
                })
            };
        };
        </script>
    </body>
    </html>

      这个例子的gruntFile.json文件是这样的, 用了nuysoft的Mock, 通过npm install Mockjs,不要忘记了

    运行下面代码

    {
      "name": "nono",
      "version": "0.0.0",
      "description": "for watch",
      "main": "Gruntfile.js",
      "dependencies": {
        "grunt": "~0.4.5",
        "express": "~3.15.2",
        "grunt-contrib-connect": "~0.6.0",
        "grunt-contrib-watch": "~0.5.3"
      },
      "devDependencies": {},
      "scripts": {
        "test": "echo "Error: no test specified" && exit 1"
      },
      "repository": {
        "type": "git",
        "url": "sqqihao.github.com"
      },
      "keywords": [
        "nono"
      ],
      "author": "nono",
      "license": "__MIT__"
    }

      nodejs的文件内容如下(安装nodejs很简单的, 下载以后复制到全局变量即可哦)

    运行下面代码

    var express = require('express')
        , http = require('http')
        , path = require('path');
    
    var Mock = require('mockjs');
    var app = express();
    
    // all environments
    app.set('port', process.env.PORT || 3000);
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    app.use(express.favicon());
    app.use(express.logger('dev'));
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(app.router);
    app.use(express.static(path.join(__dirname, 'public')));
    
    // development only
    if ('development' == app.get('env')) {
        app.use(express.errorHandler());
    };
    
    app.all('*', function(req, res, next) {
        res.header("Access-Control-Allow-Origin", "*");
        res.header("Access-Control-Allow-Headers", "X-Requested-With");
        res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
        res.header("X-Powered-By",' 3.2.1')
        res.header("Content-Type", "application/json;charset=utf-8");
        next();
    });
    
    app.get('/', function( req, res){
        res.setHeader('Content-Type', 'application/json;charset=utf-8');
        res.send("you are welcom!");
    });
    
    app.get("/list.json",function(req, res) {
        res.setHeader('Content-Type', 'application/json;charset=utf-8');
        res.send([{
            name : "nono",
            age : 26
        },{
            name : "hehe",
            age : 24
        }]);
    });
    
    
    app.get("/0.json",function(req, res) {
        res.setHeader('Content-Type', 'application/json;charset=utf-8');
        res.send([{
            name : "youare",
            age : "welcome"
        }]);
    });
    
    
    app.get("/1.json",function(req, res) {
        res.setHeader('Content-Type', 'application/json;charset=utf-8');
        res.send([{
            name : "yy",
            age : 22
        },{
            name : "niubiu",
            age : 50
        }]);
    });
    
    app.get("/2.json",function(req, res) {
        res.setHeader('Content-Type', 'application/json;charset=utf-8');
        res.send([{
            name : "ddp",
            age : 33
        },{
            name : "makiro",
            age : 20
        }]);
    });
    
    app.post("/0",function(req, res) {
        res.setHeader('Content-Type', 'application/json;charset=utf-8');
        var data = Mock.mock({
            'list|1-10': [{
                'id|+1': 1
            }]
        });
        data.list = Mock.Random.shuffle(data.list);
        res.send(data);
    });
    
    app.post("/id",function(req, res) {
        res.setHeader('Content-Type', 'application/json;charset=utf-8');
        res.send("yy");
    });
    
    http.createServer(app).listen(app.get('port'), function(){
        console.log('Express server listening on port ' + app.get('port'));
    });

      第二个例子:  

      我们在firefox或者是chrome里面一直用console.log 等打log的方法, angular对这些方法进行了简单的封装:

      

    运行下面代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>angular</title>
      <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <script src="http://cdn.bootcss.com/jquery/2.1.1/jquery.js"></script>
        <script src="http://cdn.bootcss.com/angular.js/1.3.0-beta.13/angular.min.js"></script>
        <link href="http://cdn.bootcss.com/bootstrap/3.3.1/css/bootstrap.css" rel="stylesheet">
        <!--
        <script src="http://cdn.bootcss.com/underscore.js/1.7.0/underscore-min.js" type="text/javascript"></script>
        -->
        <!--
        <script src="http://cdn.bootcss.com/angular.js/1.3.0-beta.13/angular-resource.min.js"></script>
        <script src="http://cdn.bootcss.com/angular.js/1.3.0-beta.13/angular-route.min.js"></script>
        -->
    </head>
    <body ng-app="app">
        <script type="text/javascript">
               var app = angular.module("app",[]);
        </script>
    
        <div class="panel panel-default">
            <div class="panel-heading">
                $log()的使用, 主要用来调试:
            </div>
            <div class="panel-body"  ng-controller="LogController">
                <div class="alert alert-success">
                    <input class="btn" type="text" ng-model="message"/>
                    <button class="btn btn-danger" ng-click="$log.log(message)">log</button>
                    <button class="btn btn-danger" ng-click="$log.warn(message)">warn</button>
                    <button class="btn btn-danger" ng-click="$log.info(message)">info</button>
                    <button class="btn btn-danger" ng-click="$log.error(message)">error</button>
                </div>
            </div>
            <script type="text/javascript">
            app.controller('LogController', ['$scope', '$log', function($scope, $log) {
              $scope.$log = $log;
              $scope.message = 'Hello World!';
            }]);
            </script>
        </div>
    </body>
    </html>

      例子3:

    
    

      angular的路由处理, ng-view的使用, 所有对应路由的模板会在 标志有ng-view属性的div中显示.  我们通过url控制页面对应的逻辑是个好主意么么哒;

    运行下面代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>angular</title>
      <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <script src="http://cdn.bootcss.com/jquery/2.1.1/jquery.js"></script>
        <script src="http://cdn.bootcss.com/angular.js/1.3.0-beta.13/angular.min.js"></script>
        <link href="http://cdn.bootcss.com/bootstrap/3.3.1/css/bootstrap.css" rel="stylesheet">
        <!---->
        <script src="http://cdn.bootcss.com/underscore.js/1.7.0/underscore-min.js" type="text/javascript"></script>
        
        <script src="http://cdn.bootcss.com/angular.js/1.3.0-beta.13/angular-resource.min.js"></script>
        <script src="http://cdn.bootcss.com/angular.js/1.3.0-beta.13/angular-route.min.js"></script>
        
    </head>
    <body ng-app="app">
        <script type="text/javascript">
               var app = angular.module("app",['ngRoute']);
        </script>
    
        <!--使用angular的路由处理-->
        <div class="panel panel-default">
            <div class="panel-heading">
                ng-view的实例
            </div>
            <div class="panel-body" ng-controller="route">
                <ul class="nav nav-pills" role="tablist" >
                    <li  role="presentation"  ng-repeat="id in [1, 2, 3 ]">
                        <a href="#/list/{{ id }}"> ID{{ id }}</a>
                    </li>
    
                </ul>
                <div ng-view></div>    
            </div>
        </div>
        <script type="text/javascript">
            app.controller("route",function(){});
            //app.controller("hehe", );
            //路由是定义在app的config里面的;
            app.config(function($routeProvider, $locationProvider) {
                console.log($routeProvider);
                /*
                app.controller("hehe", function($scope, $routeParams) {
                    $scope.ver = $routeParams.bookId
                    //$scope
                });
                */
                $routeProvider.when('/list/:bookId', {
                    template: '<div>This is in page : <a href="#/list/{{ver}}/detail">href-to-{{ver}}</a></div>',
                    controller : function($scope, $routeParams) {
                        $scope.ver = $routeParams.bookId
                    }
                })
                .when('/list/:bookId/detail', {
                    template : "<div>this is detail : {{bookId}}</div><a href='#/list/{{bookId}}'>back</a>",
                    controller : function($scope, $routeParams) {
                        console.log( $routeParams )
                        $scope.bookId =  $routeParams.bookId;
                    }
                })
                //剩下的走这路由
                .otherwise;
    
            })
        </script>
    </body>
    </html>
  • 相关阅读:
    JAVA中的浅拷贝与深拷贝
    Spring异步-@Async注解
    Spring 事务传播行为的使用
    DecimalFormat的使用
    Java编码问题原因以及解决
    Spring
    [TimLinux] docker CentOS7 入门——容器(1)
    [TimLinux] asciinema Linux终端录制工具嵌入私有web中
    [TimLinux] docker CentOS7安装docker-ce最新版
    [TimLinux] systemd 精通CentOS7系统启动systemd
  • 原文地址:https://www.cnblogs.com/diligenceday/p/4158293.html
Copyright © 2011-2022 走看看