AngularJS: есть ли способ использовать $ routeParams, когда не используется Single Page

0

Или, я не делаю одиночную страницу в строгом смысле слова...

Здравствуй,

Сначала некоторые

Задний план

У меня есть требование, чтобы все загруженные ранее страницы были сохранены на экране, поэтому состояние сохраняется без сохранения на хранение. Поэтому я (думаю, я) не могу использовать стандартную структуру одиночной страницы (используя ngView). Вместо этого я загружаю частичные представления MVC и добавляю их на текущую страницу, скрывая предыдущие записи.

apiService.View(viewInfo.Url).then(function (html) {
  var container = $('#' + self.targetContainerId);
  if (container) {
      container.html($compile(html)($scope));
  } else {
      loggerService.Info(self.Name, "Unable to find container '" + self.targetContainerId + "'.")
  }
});
  • Где viewInfo содержит следующее (для конкретного сценария, о котором я спрашиваю):

    return {Breadcrumb: 'People', Url: 'Partial/PeopleOverview' + '/' + options.ScreenContextId + '/' + options.RoleTypeId};

apiService.View выполняет следующие действия:

return {
    View: function (uri) {
        return self.DoViewRequest('get', uri);
    }
}

Основано на:

self.DoViewRequest = function (verb, uri) {
    var defer = $q.defer();
    verb = verb.toLowerCase();

    //start with the uri
    var httpArgs = [coreUtilityService.GetLocalUrl() + uri];
    if (verb.match(/post|put/)) {
        httpArgs.push(data);
    }

    $http[verb].apply(null, httpArgs)
    .success(function (response) {
        defer.resolve(response);
    })
    .error(function (response, status) {
        defer.reject('HTTP Error: ' + status);
    });

    return defer.promise;
};

Что мне нужно решить

ScreenContextId и RoleTypeId - важная информация, которую мне нужно пройти по всей структуре. Он получен от вызывающего url, который является следующим:

/Главная/Люди /0f8fad5b-d9cb-469f-a165-70867728950e/7c9e6679-7425-40de-944B-e07fc1f90ae7

Было бы очень легко, если бы я мог использовать $ routeParams, но поскольку я не использую Single Page в строгом смысле, я не думаю, что это доступно. Я настроил маршрутизацию следующим образом:

.config([
    '$routeProvider', function ($routeProvider) {
        $routeProvider
        .when('/Home/People/', {
            templateUrl: '/Home/People/:screenContextId/:roleTypeId'
        });
    }
])

При этом я тогда (теоретически) мог бы использовать:

$ routeParams.screenContextId $ routeParams.roleTypeId

Вопрос

Можно ли использовать $ routeParams с учетом требуемого контекста или есть альтернативы, которые я должен использовать?

Или, есть ли способ использовать Единую страницу и отвечать моим требованиям (без сохранения состояния на хранение)?

Теги:
asp.net-mvc

1 ответ

1
Лучший ответ

Для этого вы можете использовать $ location.search(). Это даст вам объект с аналогичной структурой, такой же, как и $ routeParams.

Извините, помните, что неправильно, используйте $ location.path(). Split ('/'), вы получите массив параметров пути, затем просто получите доступ к правильному с индексом.

  • 0
    Ах да, я собирался спросить, работает ли это для REST URL :). Однако путь кажется пустым. $$ absUrl содержит полный URL-адрес. Это будет работать, но тогда весь URL будет разделен, в результате чего получится массив строк, содержащий семь сущностей, из которых мне нужно только две. Есть ли более элегантная альтернатива?
  • 0
    Насколько я знаю, нет, но вы можете абстрагировать эту функциональность в своем сервисе :)
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню