通过URL参数将id传递给Angular
Pass id to Angular by URL parameter
在我的应用程序中,我确实有一个列表视图和单个列表项的详细视图。单击列表条目即可打开详细视图。这很好用。但是,现在我想在电子邮件中提供链接,以便直接访问详细的项目视图。
我发现,我可能需要ngRoute来实现这一点,但它并没有按预期工作。事实上,它根本不起作用。我的alert()
函数从未被调用。
这是我的控制器的相关部分:
var myController = angular.module('myProject.controllers', ['ngRoute']);
myController.config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
$routeProvider.when('/show/:itemId', {
templateUrl: 'item-details.html',
controller: 'MyController'
});
$locationProvider.html5Mode(true);
}]);
myController.controller('MyController', ['$scope', '$routeParams', function($scope, $routeParams) {
/** Other stuff... */
$scope.$on('$routeChangeSuccess', function() {
// $routeParams should be populated here
alert("itemId: " + $routeParams.itemId);
if ($routeParams.item) {
myFunction($routeParams.itemId);
}
});
}]);
我试着用两个调用我的页面
http://www.example.com/index.html#/show/123
和
http://www.example.com/show/123
但都没有奏效。我做错了什么吗?
我过去也遇到过同样的问题,我只是使用了Jquery函数
var getUrlParameter = function getUrlParameter(sParam) {
var sPageURL = decodeURIComponent(window.location.search.substring(1)),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return sParameterName[1] === undefined ? true : sParameterName[1];
}
}
};
$scope.item = getUrlParameter('show');
但您需要将链接更改为以下内容:
http://dummy.com/?show=123
希望这行得通,对我来说还是行的。不过不知道这是不是一个恶作剧。
我设法使用$location
依赖项通过URL将参数传递给我的控制器:
var myController = angular.module('myProject.controllers', []);
myController.config(['$locationProvider', function($locationProvider) {
$locationProvider.html5Mode(true);
}]);
myController.controller('MyController', ['$scope', '$location', function($scope, $location) {
/** Other stuff... */
/** index.html?itemId=123 */
var id = $location.search().itemId;
if (id) {
alert("Item id: " + id);
myFunction(id);
}
}]);
这在传递给控制器的参数方面起作用。然而,这给我留下了一个问题:我界面中的所有ngClick
按钮现在都会附加查询参数,这有点烦人,因为例如,我不想将itemId
附加到back
按钮上。
如果我找到任何解决方案,我会设法解决这个问题,并向您汇报。
这篇博文对$location
很有帮助。
相关文章:
- 如何从值的Angular下拉列表中获取ID
- 如何在angular js中的select选项中获取所选项目id
- 如何用angular js对HTML元素的id属性进行条件设置
- 当名称空间在id参数之前声明时,Angular UI路由器停止工作
- angular$resource delete-传递id参数
- Angular js ng-repeat work based on id
- Angular JS:根据 id 检索 json 数据
- Nested Views with Dynamic Id's Angular & Rails
- Angular JS TypeError:无法读取路由上未定义的属性“id”
- Angular 获取特定 ID 中的标签内容
- 禁用/隐藏基于 Angular JS 中 ID 的特定锚标记
- Angular 2 - 如何为动态加载的组件设置 id 属性
- Angular JS 自动递增计数器的 ID 字段
- 使用 Angular JS 的电子邮件 ID 的自动完成建议
- 在 Angular JS 中从模型检索到控制器的 id
- 带有 AJAX 多选的 Angular ui-select2 - 检索最终选择值作为 id 而不是 json
- 如何在 Angular 中增加 JSON 文件的 ID 号
- Angular - 基于 ID FK 链接表中的两个 API 源
- 如何从指令的链接函数的“element”参数中选择具有特定ID的元素,使用jQuery而不是angular的jqLite
- 在Angular对象中循环时向HTML添加id