我在MVC项目中使用Angular。要更改视图,我将URL传递给我的Angular控制器,如下所示:
在我的角度模块中:
var app = angular.module('myModule', ['ui.bootstrap', 'checklist-model', 'ngAnimate', 'ngTouch', 'ui.grid', 'ui.grid.pagination', 'ui.grid.selection', 'ui.grid.exporter', 'ui.grid.autoResize', 'ngRoute'])
在我的MVC控制器中:
public ActionResult Index()
{
ConfigureDefaultLayout();
return View("ContractorOperatorView");
//return PartialView("_ScoringSetOverride");
}
public ActionResult GetContractorPage(int companyId, string currentStatus)
{
contractorId = companyId;
ReleaseStatus = currentStatus;
string newUrl = "/SSQV4/SSQV5/Contractor/Index";
return Json(newUrl, JsonRequestBehavior.AllowGet);
}
然后在我的角度控制器中:
$scope.rowDblClick = function (row) {
generalsearchService.goToContractorPage(row.entity.CompanyID, row.entity.ReleaseStatus)
.success(function (data) {
$window.location.href = data;
})
};
在我的Angular服务中 -
this.goToContractorPage = function (id, status) {
return $http.post('/SSQV4/SSQV5/Contractor/GetContractorPage', { "companyId": id, "currentStatus": status })
};
一切正常,因为我正在制作"承包商ID"在我的MVC控制器中静态,但这导致功能问题。我需要将contractorId和URL一起传递给我的Angular控制器,但我不知道如何。我试过这个:
在我的MVC控制器中 -
string newUrl = "/SSQV4/SSQV5/Contractor/Index?id=" + contractorId;
然后在我的Angular控制器中 -
$scope.contractorid = $routeParams.id;
我收到错误" routeParams未定义"。我知道必须有某种方法可以做到这一点,但我对此无能为力。有很多关于将参数从Angular传递给MVC的信息,但反之则不多。
非常感谢任何帮助!
我尝试将它放在我的app.js中:
var app = angular.module('myModule', ['ui.bootstrap', 'checklist-model', 'ngAnimate', 'ngTouch', 'ui.grid', 'ui.grid.pagination', 'ui.grid.selection', 'ui.grid.exporter', 'ui.grid.autoResize', 'ui-router'])
$stateProvider.state('contractor', {
url: '/Contractor?contractorId',
params: {
contractorId: {
value: null,
squash: true
}
}
});
现在我得到" $ stateProvider未定义"错误。
答案 0 :(得分:0)
假设您使用ui-router Angular模块,您需要在州定义中定义参数:
$stateProvider.state('contractor', {
url: '/contractor?contractorId',
params: {
contractorId: {
value: null,
squash: true
}
}
});
然后你需要在使用之前将$ routeParams注入你的控制器。
答案 1 :(得分:0)
在你的app.js文件中,确保添加一个有参数的路由。 Check out here.
通常,URL都有动态部分,称为参数。有几个选项可用于指定参数。基本参数如下所示:
$stateProvider
.state('contacts.detail', {
url: "/contacts/:contactId",
templateUrl: 'contacts.detail.html',
controller: function ($stateParams) {
// If we got here from a url of /contacts/42
expect($stateParams).toBe({contactId: "42"});
}
})
或者你也可以使用花括号:
// identical to previous example
url: "/contacts/{contactId}"
示例:
'/ hello /' - 仅当路径正好是'/ hello /'时匹配。尾部斜杠没有特殊处理方式,模式必须匹配整个路径,而不仅仅是前缀。
'/ user /:id' - 匹配'/ user / bob'或'/ user / 1234 !!!'甚至'/ user /'但不是'/ user'或'/ user / bob / details'。第二个路径段将被捕获为参数“id”。
'/ user / {id}' - 与上一个示例相同,但使用大括号语法。
'/ user / {id:int}' - param被解释为Integer。
我希望它有用。