Javascript AngularJS:如何通过ng href将多个参数传递给控制器?

Javascript AngularJS:如何通过ng href将多个参数传递给控制器?,javascript,angularjs,mean-stack,Javascript,Angularjs,Mean Stack,我有一个包含编辑按钮的表来更新记录。当我将singleid传递给ng href时,它的工作状态和打开表单页面: 例如:在我的index.html表格中 <a class="btn btn-warning" ng-href="#/provider/{{row._id}}">Edit</a> 它不工作,并重定向到主页 这是我的控制器: $timeout(function () { if ($routeParams.id !== undefined)

我有一个包含编辑按钮的表来更新记录。当我将single
id
传递给
ng href
时,它的工作状态和打开表单页面:

例如:在我的
index.html
表格中

<a class="btn btn-warning" ng-href="#/provider/{{row._id}}">Edit</a>
它不工作,并重定向到主页

这是我的控制器:

    $timeout(function () {
        if ($routeParams.id !== undefined) {                
            $http.get('/providerlist/'+$routeParams.id, {
                params:{
                    id:$routeParams.id, 
                    collectionName:$routeParams.collectionName
                }
            }).success(function (response) {
                alert(response);
                $scope.providerList = response;
                $scope.id = response['_id'];
            });
        }
    });
app.js
用于路由:

var ProviderApp = angular.module('ProviderApp', ['ngRoute'])
.config(['$routeProvider', function ($routeProvider) {
    $routeProvider
    .when('/home', {
        templateUrl: 'templates/home/index.html',
        controller: 'HomeController',
        controllerAs: 'home'
    })

    .when('/provider', {                            
        templateUrl: 'templates/provider/index.html',
        controller: 'ProviderController',
        controllerAs: 'provider'
    })                        
    .when('/provider/:id', {                            
        templateUrl: 'templates/provider/form.html',
        controller: 'ProviderController',
        controllerAs: 'provider'
    })                        
    .otherwise({
        redirectTo: '/home'
    });
}]);
这里我想做的就是在点击
edit
按钮后,它应该重定向到
form.html
,参数/数据为
id
collectionName


任何帮助都将不胜感激。

如果您想在
ng href
中使用多个参数,还应在
app.js
中更新您的路线url

当您在
ng href
中使用多个参数,但没有与此路由匹配的路由时,则
起作用,否则
路由重定向到
主页

你可以试试

在html中:

<a class="btn btn-warning" ng-href="#/provider/{{row._id}}/collectionName/{{collectionName}}">Edit</a>
在控制器中,需要进行如下更改:

 $http.get('/providerlist/'+$routeParams.id +'/collectionName/'+ $routeParams.cName)
 .success(function (response) {
     alert(response);
     $scope.providerList = response;
     $scope.id = response['_id'];
 });

因此,服务器端路由应该是这样的:
/providerlist/:id/collectionName/:cName

ngRoute路径中的路径可以包含以冒号开头,以星形结尾的命名组,如:name*,当路由匹配时,所有字符都急切地存储在给定名称下的$routeParams

例如,路径如下:/color/:color/largecode/:largecode*/edit

对于此示例URL:/color/brown/largecode/code/with/slashes/edit

和摘录:

颜色:棕色

大代码:代码/带/斜杠

因此,在您的情况下,路线将是

.when('/provider/:id*\/collectionName/:collectionName*\', {                            
        templateUrl: 'templates/provider/form.html',
        controller: 'ProviderController',
        controllerAs: 'provider'
    })   

这将确保即使结果href链接中有特殊字符和正斜杠,也会将您重定向到正确的控制器和页面…

您需要将“/provider/:id”…更改为类似于…“/provider/:id/collection/:collectionName”的内容,然后在控制器中使用这些参数。。。使用$routeParams…@damitj07:我尝试了
。当('/provider/:id/collection/:collectionName',{templateUrl:'templates/provider/form.html',controller:'ProviderController',controllerAs:'provider'})时,
但它不起作用,我想这是因为你有两个roue/provider/。。。同名…@damitj07:Yes。。但两者都不同。第二个参数是参数,第一个参数不是是,但我认为,因为您正在映射多条路线。。到同一控制器函数..参数处理中可能存在问题。。你可以试着修改其中一个,然后检查它是否工作…写得和这个一模一样,但它不工作。。在这之后我应该在控制器上写些什么?哦,太好了。。这就是我错过的。。更新了我的代码及其工作状态。。谢谢shaishab。。!!!
 $http.get('/providerlist/'+$routeParams.id +'/collectionName/'+ $routeParams.cName)
 .success(function (response) {
     alert(response);
     $scope.providerList = response;
     $scope.id = response['_id'];
 });
.when('/provider/:id*\/collectionName/:collectionName*\', {                            
        templateUrl: 'templates/provider/form.html',
        controller: 'ProviderController',
        controllerAs: 'provider'
    })