效果扒裙

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

参考:http://docs.angularjs.org/tutorial/

创建Module

使用module()方法。在第2个参数中传入依赖模块数组。

var phonecatApp = angular.module('phonecatApp', [
    'ngRoute',
    'phonecatControllers'
]);

注册Controller

使用controller()方法。

NG识别参数名并自动注入依赖。若使用代码压缩,则参数名将被压缩从而无法使用自动注入。

使用以下两种显式注入方式可解决代码压缩带来的问题。

方式一、

function PhoneListCtrl($scope, $http) {...}
PhoneListCtrl.$inject = ['$scope', '$http'];
phonecatApp.controller('PhoneListCtrl', PhoneListCtrl);

方式二、

function PhoneListCtrl($scope, $http) {...}
phonecatApp.controller('PhoneListCtrl', ['$scope', '$http', PhoneListCtrl]);

注册控制器时通常采用匿名函数的写法

phonecatApp.controller('PhoneListCtrl', ['$scope', '$http', function($scope, $http) {...}]);

使用$http模块进行HTTP请求

请求url为'phones/phones.json',并通过success方法设置请求成功后的回调函数。

NG将自动侦测JSON响应并解析。

$http.get('phones/phones.json').success(function(data) {
    $scope.phones = data;
});

注册Service

注册服务,需要创建一个依赖于ngResource【angular-resource.js】的模块。

使用factory方法(除此之外还有provide()和service()方法),显式注入ngResource.$resource。

教程中没有对$resource解释得比较清楚,故而参考了在线文档,并翻译如下:

http://www.cnblogs.com/koukabatsugun/p/3442525.html

var phonecatServices = angular.module('phonecatServices', ['ngResource']);
 
phonecatServices.factory('Phone', ['$resource',
    function($resource){
        return $resource('phones/:phoneId.json', {}, {
            query: {method:'GET', params:{phoneId:'phones'}, isArray:true}
    });
}]);

以上,$resouce的第三个参数actions中,覆盖了默认的query动作。

1、设置HTTP请求为GET方法。

2、指定url模板中的【phoneId】参数为【phones】。

3、返回值为数组。

使用Phone服务的参考代码如下:

$scope.phones = Phone.query();

$scope.phone = Phone.get({phoneId: $routeParams.phoneId}, function(phone) {
    $scope.mainImageUrl = phone.images[0];
});

定义Router

为应用配置路由,需要创建一个依赖于ngRoute【angular-route.js】的模块。

使用模块的config()方法,显式注入ngRoute.$routeProvider。

var phonecatApp = angular.module('phonecatApp', [
    'ngRoute',
    'phonecatControllers'
]);
 
phonecatApp.config(['$routeProvider',
    function($routeProvider) {
        $routeProvider.
          when('/phones', {
              templateUrl: 'partials/phone-list.html',
              controller: 'PhoneListCtrl'
          }).
       when('/phones/:phoneId', {
              templateUrl: 'partials/phone-detail.html',
              controller: 'PhoneDetailCtrl'
          }).
          otherwise({
              redirectTo: '/phones'
    });
}]);

从URL中获取参数

依赖$routeParams。

从【/phones/:phoneId】中获取phoneId,只需$routeParams.phoneId。

phonecatControllers.controller('PhoneDetailCtrl', ['$scope', '$routeParams',
    function($scope, $routeParams) {
        $scope.phoneId = $routeParams.phoneId;
}]);
posted on 2013-11-26 01:04  效果扒裙  阅读(803)  评论(0编辑  收藏  举报