2015-09-20 39 views
0

我有一个旨在支持特定型号的所有CRUD操作的控制器:显示的记录列表,记录的展示细节,编辑,创建,更新和删除。

不同视图使用相同的控制器渲染 - 但每个视图,需要不同的初始化:为列表,我应该加载的记录页,对于详细信息视图 - 我会通过ID加载。

获取控制器初始化状态的最佳做法是什么?

下面是我使用的是几条路线的例子:

function config($routeProvider, $locationProvider) { 
    $routeProvider 

     // ... 

     .when('/activity/list', { 
      controller: 'ActivityController', 
      templateUrl: 'views/activityList.html', 
      controllerAs: 'vm' 
     }) 

     .when('/activity/create', { 
      controller: 'ActivityController', 
      templateUrl: 'views/createNewActivity.html', 
      controllerAs: 'vm' 
     }) 

     .when('/activity/:id', { 
      controller: 'ActivityController', 
      templateUrl: 'views/activity.html', 
      controllerAs: 'vm' 
     }) 

     .otherwise({ redirectTo: '/login' }); 
} 

补丁 - 我检查路径明确区分开来。根据我的猜测,这不可能是最佳做法。

if ($location.$$path == '/activity/list') { 
    initList(); 
} 
+1

可以在路由配置对象中设置其他属性,并通过'$ route.current'检查它们或使用'resolve'在控制器中注入变量 – charlietfl

+0

其他属性? $ routeProvider.when的文档似乎没有该属性。我错过了什么? https://docs.angularjs.org/api/ngRoute/provider/$routeProvider – orberkov

+0

嗯...我知道你曾经可以把属性放在那些对象上......看起来你已经不能了,但仍然可以使用'resolve'。我没有长时间使用'ngroute',因为缺乏对这个简单问题的活动,而且你的(charliefl)答案 - 你是否建议AngularJS导航的行业标准是ui-route,并且使用ui-router? – charlietfl

回答

0

在我看来您的情况最好的办法是不理控制器,并与RESTAPI去,这里是一个例子,我将如何做到这一点:

路线文件:

.when('/tours', { 
    templateUrl: 'scripts/partials/pages/tours.partial.html', 
    controller: 'TourController', 
    controllerAs: 'vm', 
    resolve: { 
     toursService: function (genericData) { 
      return genericData.getTours; 
     } 
    } 
}) 
.when('/tour/:id', { 
    templateUrl: 'scripts/partials/pages/tour-single.html', 
    controller: 'TourSingleController', 
    controllerAs: 'vm', 
    resolve: { 
     toursSingleService: function ($route, genericData) { 
      // This will get us the current item with specific ID 
      var id = $route.current.params.id; 
      return genericData.getTourSingle(id); 
     }, 
    } 
}) 

这里是我的genericservice.js文件:

function genericData($resource) { 

    // ngResource call to our static data 
    var TourSingle = $resource('/api/tour/:id', {'id': '@id'}); 

    function getListData(RestData) { 
     return RestData.query().$promise.then(function(results) { 
      return results; 
     }, function(error) { // Check for errors 
     }); 
    } 

    function getSpecificData(id) { 
     return TourSingle.get({'id':id}).$promise.then(function(results) { 
      return results; 
     }, function(error) { // Check for errors 
     }); 
    } 

    return { 
     getTours: getListData(TourSingle), 
     getTourSingle: getSpecificData, 
    } 
} 

这是控制器例如:

function TourController(toursService) { 

    // vm is our capture variable 
    var vm = this; 

    vm.tours = toursService; 
} 
相关问题