1. 程式人生 > >Angularjs + Requirejs 單頁面WEB引用例項

Angularjs + Requirejs 單頁面WEB引用例項

目前網際網路上很流行單頁面WEB應用程式,前後端分離啊什麼的,於是小試牛刀了一番,用Angularjs + Requirejs搭建一個應

用框架,我比較喜歡使用Angularjs的資料繫結功能,

自定義指令什麼的,畢竟現在前後端分離,前端有很多事情要做的。

本章介紹單頁面路由的配置以及Angularjs常用Service封裝。

一、主函式(我取名main)

require.config({

    baseUrl: './',

    paths: {

'app' : 'assets/angular/app',

        'angular': 'assets/angular/angular.min',

        'config-routes': 'assets/angular/config',

        'angular-ui-router': 'assets/angular-ui-router/angular-ui-router.min',

        'angular-async-loader': 'assets/angular-async-loader/angular-async-loader.min',

        'jquery' : 'assets/jquery/jquery-2.1.1',

        'layer' : 'assets/layer/layer',

        'bootstrap' : 'assets/bootstrap/bootstrap-js',

        'css' : 'assets/requirejs/require-css'

    },

    shim: {

  'layer' : ['jquery'],

  'angular-routes' : ['angular'],

'bootstrap' : ['jquery'],

          'angular': {exports: 'angular'},

          'angular-ui-router': {deps: ['angular']}

    }

});

require(['angular', 'app','config-routes','bootstrap'], function (angular) {

    angular.element(document).ready(function () {

        angular.bootstrap(document, ['app']);

        angular.element(document).find('html').addClass('ng-app');

    });

});

二、主頁面(index

<!DOCTYPE html>

<html>

<head>

<!--<base href="/">-->

    <meta charset="utf-8">

    <title></title>

</head>

<body>

<nav>

<ul>

<li><a ui-sref="home">HOME</a></li>

<li><a ui-sref="about">ABOUT</a></li>

</ul>

</nav>

<div ui-view></div>

<script src="assets/requirejs/require.js" data-main="main.js"></script>

</body>

</html>

三、路由配置以及Get Post請求封裝(config

define(function (require) {
    var app = require('./app');
    app.run(['$state', '$stateParams', '$rootScope', function ($state, $stateParams, $rootScope) {
        $rootScope.$state = $state;
        $rootScope.$stateParams = $stateParams;
    }]);

//配置常量
app.constant("http", "");
app.constant("errorMessage", "伺服器異常,請稍後重試!")

//配置路由
    app.config(['$stateProvider', '$urlRouterProvider','$httpProvider', function ($stateProvider, $urlRouterProvider, $httpProvider, $locationProvider) {
   
    //去掉URL的#
    //$locationProvider.html5Mode(true);
    //預設的首頁
        $urlRouterProvider.otherwise('/home');
        
        //禁用ajax請求快取
        if(!$httpProvider.defaults.headers.get){
        $httpProvider.defaults.headers.get = {};
        }
        //配置http傳送模式
        $httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
        $httpProvider.defaults.headers.get['Pragma'] = 'no-cache';
        delete $httpProvider.defaults.headers.common["X-Requested-With"];
        $httpProvider.defaults.headers.post["Content-Type"] = "application/json";
        $httpProvider.defaults.transformRequest = function(data){
        //當引數不為空的時候
        if(data){
        return JSON.stringify(data);
        }
        }
//頁面跳轉
        $stateProvider
            .state('home', {
                url: '/home',
                templateUrl: 'page/home/home.html',
                controllerUrl: 'controller/home',
                controller: 'home'
            })
            .state('about', {
                url: '/about',
                templateUrl: 'page/about/about.html',
                controllerUrl: 'controller/about',
                controller: 'about'
            })
    }]);
   
   
   //Service
   
   app.service("httpService",function($http, http, errorMessage){
   //帶錯誤引數的POST請求
   this.post = function(URL, params, success, error){
   $http.post(http + URL, params).success(function(resp){
   result(resp, success, error);
   }).error(function(resp){
   layer.msg(errorMessage);
   })
   }
   
   //帶錯誤引數的GET請求


   this.get = function(URL, success, error){
   $http.get(http + URL).success(function(resp){
   result(resp, success, error);
   }).error(function(resp){
   layer.msg(errorMessage);
   })
   }   
   })   
});

最後補充一下(app

define(function (require, exports, module) {
    var angular = require('angular');
    var asyncLoader = require('angular-async-loader');
    require('angular-ui-router');
    var app = angular.module('app', ['ui.router']);
    asyncLoader.configure(app);
    module.exports = app;
});
奉上目錄結構