我一直在阅读有关此主题的先前问题,似乎没有什么对我有用。
我的页面是从外部应用程序调用的,它传递的内容如下:
http://MySite/index.html?CompanyId=4000&ActionType=Reservation
我需要从中读取CompanyId和ActionType。
我无法使用路由参数,因为在任何路由信息添加到网址之前参数都是。
我已经尝试了这两个......并且y返回true?
var x = $location.search('CompanyId');
var y = $location.search().CompanyId;
我的模块配置定义如下:
// Defining a new module
var module = angular.module("aaa", ["ui.bootstrap","ngRoute"]);
module.config(['$routeProvider', '$locationProvider',
function ($routeProvider, $locationProvider) {
$routeProvider
.when("/displaySizes", {
templateUrl: "views/displaySizes.html",
controller: "displaySizesController"
})
.when("/collectCustomerInfo", {
templateUrl: "views/collectCustomerInfo.html",
controller: "collectCustomerInfoCtrl"
})
.otherwise({
redirectTo: "/displaySizes"
})
$locationProvider.html5Mode(true);
}]);
有人发现我做错了吗?
澄清......我所拥有的是:
http://example.com?companyId=7/#/some/path?foo=bar&baz=xoxo
所以我试图读取的参数是在#path之前。似乎$ location.search只搜索#之后的路径部分?有没有办法获取companyId参数(没有编写所有的解析代码)?
答案 0 :(得分:1)
$ location.search()在已解析的JSON对象中返回查询参数 - 因此它只返回'?'之后的值。在网址中。
以下是获取companyId参数的一种解决方案。它不使用Angular并且使用"解析代码",但它看起来很简单。
var url = window.location.href;
var parts = url.split("/");
var firstUrlTerm = parts[0];
var firstTermParts = firstUrlTerm.split("=");
var firstTermValue = firstTermValue[1];
答案 1 :(得分:0)
我最终创建了一个解析URL的Angular服务。
// IIFE (Immediately Invoked Function Expression)
(function () {
angular.module("aaa.services", [])
.factory('aaaInformationService', ["$rootScope",
function($rootScope,$location) {
var siteInformation = {};
// Properties
siteInformation.companyId=getUrlVars()["CompanyId"];
siteInformation.connectionType = getUrlVars()["ConnectionType"];
// Support functions
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (m, key, value) {
vars[key] = value;
});
return vars;
}
return siteInformation;
}])
}());
我无法让$ location工作。