AngularJs — динамические маршруты с Crud в 1 контроллере

Я могу успешно использовать динамические маршруты. Я также хотел бы НЕ разделять функциональность CRUD в моих разных контроллерах (т. е. хранить CRUD в одном контроллере для каждого объекта).

По этому вопросу я изменил свои маршруты Используя тот же контроллер для всех операций CRUD (похожих на Rails), добавив разрешение по рекомендации Стьюи:


Я понял это, но SO не позволяет мне опубликовать решение ниже, поэтому вот оно:


<сильный>1. Маршруты

angular.module('anuRoutes', [])

.config(['$routeProvider', function($routeProvider) {
    $routeProvider.when('/', { templateUrl: '/App_Angular/partials/Common/Welcome.html' });
    $routeProvider.when('/:name', {
        templateUrl: '/App_Angular/partials/Common/Welcome.html',
        controller: PagesCtrl,
        action: 'list' 
    });
    $routeProvider.when('/:name/:id', {
        templateUrl: '/App_Angular/partials/Common/Welcome.html',
        controller: PagesCtrl,
        action: 'show'
    });
    $routeProvider.when('/:name/new', {
        templateUrl: '/App_Angular/partials/Common/Welcome.html',
        controller: PagesCtrl,
        action: 'new'
    });
    $routeProvider.when('/:name/:id/edit', {
        templateUrl: '/App_Angular/partials/Common/Welcome.html',
        controller: PagesCtrl,
        action: 'edit'
    });
    $routeProvider.otherwise({ redirectTo: '/App_Angular/partials/Common/Welcome.html' });
}]);

<сильный>2. Контроллер страниц:

function PagesCtrl($scope, $http, $route, $routeParams, $compile, anuCache) {

var pageName = ($routeParams.name).replace("_", "/");
console.log('name:' + pageName);
$route.current.templateUrl = '/App_Angular/partials/' + pageName + ".html";

});

<сильный>3. Пассажирский контролер:

angular.module('anuPassengerVehicles', [])

.controller('PassengerVehiclesCtrl', функция ($scope, $timeout, PassVehSvc, $route) {

$scope.ControllerName = "PassengerVehiclesCtrl";
$scope.PassVehs = [];

var crudAction = $route.current.action;

 if(crudAction === 'list'){
  PassVehSvc.GetPassVehs().
  then(function(config, data, headers, status) {
     $scope.PassVehs = arguments[0].data;
    // console.log(arguments[0].data);
  }

 if(crudAction === 'edit'){
  .....
   }

 if(crudAction === 'new'){
  .....
   }

 if(crudAction === 'show'){
  .....
   }

 });

person Mike Jones    schedule 05.12.2013    source источник


Ответы (1)


Ошибка [$injector:unpr] выглядит для меня как моя (свежая ошибка): «Ошибка: [$injector:unpr] Неизвестный поставщик: $scopeProvider ‹- $scope ‹- usersFactory»


Есть несколько причин, которые могут породить такую ​​ошибку:

1) нет инициализации приложения (ng-app) в HTML-документе

2) или двойная инициализация (ng-app)

<html ng-app>
<div id="cartView" ng-app="myApp" ng-controller="CartCtrl">

3) иногда можно переопределить модуль в двух местах, например, такой код сразу, выполнив:

angular.module ('MyService' ...
). factory (...);

затем немного вниз тот же файл

angular.module ('MyService' ...
.) value ('version', '0 .1 ');

4) иногда добавляется $scope - и не должно

Мой ПЛОХОЙ синтаксис:

myControllers.factory('usersFactory', ['$http','$scope', function($scope,$http){...}

РАБОТАЮЩИЙ:

myControllers.factory('usersFactory', ['$http',function($scope,$http){...}

5) Еще один сюрприз: пробелы в значениях массива:

controller('myCtrl', ['$scope', '$timeout ' (...)

Подробнее читайте в этом сообщении.

person MirekH    schedule 05.12.2013