我尝试使用以下代码将URL参数传递给AngularJS控制器:
<div ng-app>
<div ng-controller="TodoCtrl" ng-init="init(getParameter('myParam'))">
</div>
</div>
function TodoCtrl($scope) {
$scope.init = function(category)
{
$scope.category = category;
alert(category);
};
}
function getParameter(theParameter) {
var params = window.location.search.substr(1).split('&');
for (var i = 0; i < params.length; i++) {
var p=params[i].split('=');
if (p[0] == theParameter) {
return decodeURIComponent(p[1]);
}
}
return false;
}
http://jsfiddle.net/U3pVM/15042?myParam=test
但似乎未正确调用函数getParameter('myParam')
我希望alert(category);
能够显示&#39; test&#39;但它显示undefined
。
如何将URL参数传递给AngularJS控制器?
更新:
以下是我采用的解决方案:
alert(gup('category' , $location.absUrl()))
function getParameter( name, url ) {
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
var regexS = "[\\?&]"+name+"=([^&#]*)";
var regex = new RegExp( regexS );
var results = regex.exec( url );
return results == null ? null : results[1];
}
答案 0 :(得分:1)
Angular内置帮助程序来读取和设置网址。在这种情况下,请使用$location.search()
:(请注意,此代码段仅适用于设置参数的页面!)
function TodoCtrl($scope, $location) {
var param = $location.search().myParam;
if(param) {
$scope.category = param;
alert(param);
}
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app>
<div ng-controller="TodoCtrl">
</div>
</div>
在这里,我“假”设置参数,以便您可以看到它的实际效果:
function TodoCtrl($scope, $location) {
$location.search('myParam', 'myValue')
var param = $location.search().myParam;
if(param) {
$scope.category = param;
alert(param);
}
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app>
<div ng-controller="TodoCtrl">
</div>
</div>
答案 1 :(得分:0)
除了使用ng-repeat的特殊属性别名外,不要使用ng-init,有关详细信息,请参阅ng-init文档。相反,如果您需要从URL参数中读取内容,则可以使用$ routeParams或$ stateParams,如果您分别使用ngRoute或ui-router或使用$ location.search