UI 路由器参数值在目的地未定义
UI Router Params value is coming as undefined in destination
我想将参数值从一页传递到另一页而不显示 URL 中的值。因为我使用的是 ui-router,所以我遇到了 "params" 的东西,但不知何故我无法让它工作。请看下面的代码示例:-
index.html
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.6/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/1.0.3/angular-ui-router.min.js"></script>
<script src="../../Scripts/AngularControllers/LoginHomeControllers/RouteMainController.js"></script>
<script src="../../Scripts/AngularControllers/LoginHomeControllers/LoginController.js"></script>
<script src="../Scripts/AngularControllers/Test2Controller.js"></script>
<script src="../Scripts/AngularControllers/Test3Controller.js"></script>
</head>
<body>
<div ui-view="mainview"></div>
</body>
</html>
RouteMainController.js
var app = angular.module("appHome", ['ui.router']);
app.config(function ($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/login');
$stateProvider
.state('introduction', {
url: '/',
views: {
'mainview':
{
templateUrl: 'Login.html',
controller: 'ctrlLogin'
}
}
})
.state('login', {
url: '/login',
views: {
'mainview':
{
templateUrl: 'Login.html',
controller: 'ctrlLogin'
}
}
})
.state('home', {
url: '/home',
views: {
'mainview':
{
templateUrl: 'Home.html',
}
}
})
.state('home.requestsummary', {
url: '/requestsummary',
views: {
'homedetailview':
{
templateUrl: 'Test2.html',
controller: 'ctrlReqSumm'
}
}
})
.state('home.requestsummary.hello', {
url: '/requestdetail',
views: {
'homedetailview@home':
{
template: 'Test3.html',
controller: 'ctrlRequestDetail',
params: { paramOne: "defaultValueOne" }
}
}
})
});
Login.html
<div>
<button id="btnAdd" type="submit" ng-click="Login()">Login</button>
</div>
LoginController.js
var myApp = angular.module('appHome');
myApp.controller("ctrlLogin", ['$scope', '$location', function ($scope, $location) {
$scope.Login = function () {
window.location.href = '#!home/requestsummary';
}
}]);
Home.html
<!--Sample Code for displaying Menu Tab and corresponding link-->
<li>
<a href="#">Employees <span class="caret"></span></a>
<ul class="dropdown-menu sub-menu">
<li><a ui-sref=".employeeadd">Add Employee Record</a></li>
</ul>
</li>
<div ui-view="homedetailview"></div>
Test2.html
<div>
<div ng-repeat="request in requestData">
{{request.name}}
<a ui-sref=".requestdetail({paramOne:request.Id})">
</a>
</div>
</div>
Test2Controller.js
var myApp = angular.module('appHome');
myApp.controller("ctrlReqSumm", ['$scope', function ($scope) {
$scope.requestData = [{
'Id': "1", 'name': "Hello",
'Id': "2", 'name': "Hi",
'Id': "3", 'name': "OK"
}]
}])
Test3.html
<div>
<label>The id is: </label> {{requestId}}
</div>
Test3Controller.js
var myApp = angular.module('appHome');
myApp.controller("ctrlRequestDetail", ['$scope', '$stateParams', function ($scope, $stateParams) {
$scope.requestId = $stateParams.paramOne;
}]);
所以我想将paramOne的值从Test2.html传递给Test3.html并显示在那里.当前参数 paramOne 显示的值为 "undefined"
请告诉我如何在这种情况下使用参数,或者是否有更好的方法来解决这个问题。
检查这个
它提供了一个具有两种类型参数的工作示例。
make sure that your Usage match: ui-sref='stateName({param: value, param: value})'
好的..我为你准备了Plunker :)
- 您代码中的主要问题是您定义
Params
属性 的位置,它应该在根级别(与 url
属性 相同的级别)
- 将
template: 'Test3.html',
更改为 templateUrl: 'Test3.html',
- 因为
home.requestsummary.hello
按照您的定义在 home.requestsummary
的子项中声明,我认为您需要将 'homedetailview@home'
转化为 'test2detailview@home.requestsummary'
,并具有 <div ui-view="test2detailview"></div>
在 Test2.html
希望这个回答你兄弟:)
可能参数还没有解析?如果你尝试:
myApp.controller("ctrlRequestDetail", ['$rootScope', '$scope', '$stateParams', ($rootScope, $scope, $stateParams) => {
$rootScope.$on('$stateChangeSuccess', (event, toState, toParams, fromState, fromParams) => {
console.log(toParams, fromParams)
});
}]);
注意添加的 $rootScope
依赖项
我想将参数值从一页传递到另一页而不显示 URL 中的值。因为我使用的是 ui-router,所以我遇到了 "params" 的东西,但不知何故我无法让它工作。请看下面的代码示例:-
index.html
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.6/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/1.0.3/angular-ui-router.min.js"></script>
<script src="../../Scripts/AngularControllers/LoginHomeControllers/RouteMainController.js"></script>
<script src="../../Scripts/AngularControllers/LoginHomeControllers/LoginController.js"></script>
<script src="../Scripts/AngularControllers/Test2Controller.js"></script>
<script src="../Scripts/AngularControllers/Test3Controller.js"></script>
</head>
<body>
<div ui-view="mainview"></div>
</body>
</html>
RouteMainController.js
var app = angular.module("appHome", ['ui.router']);
app.config(function ($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/login');
$stateProvider
.state('introduction', {
url: '/',
views: {
'mainview':
{
templateUrl: 'Login.html',
controller: 'ctrlLogin'
}
}
})
.state('login', {
url: '/login',
views: {
'mainview':
{
templateUrl: 'Login.html',
controller: 'ctrlLogin'
}
}
})
.state('home', {
url: '/home',
views: {
'mainview':
{
templateUrl: 'Home.html',
}
}
})
.state('home.requestsummary', {
url: '/requestsummary',
views: {
'homedetailview':
{
templateUrl: 'Test2.html',
controller: 'ctrlReqSumm'
}
}
})
.state('home.requestsummary.hello', {
url: '/requestdetail',
views: {
'homedetailview@home':
{
template: 'Test3.html',
controller: 'ctrlRequestDetail',
params: { paramOne: "defaultValueOne" }
}
}
})
});
Login.html
<div>
<button id="btnAdd" type="submit" ng-click="Login()">Login</button>
</div>
LoginController.js
var myApp = angular.module('appHome');
myApp.controller("ctrlLogin", ['$scope', '$location', function ($scope, $location) {
$scope.Login = function () {
window.location.href = '#!home/requestsummary';
}
}]);
Home.html
<!--Sample Code for displaying Menu Tab and corresponding link-->
<li>
<a href="#">Employees <span class="caret"></span></a>
<ul class="dropdown-menu sub-menu">
<li><a ui-sref=".employeeadd">Add Employee Record</a></li>
</ul>
</li>
<div ui-view="homedetailview"></div>
Test2.html
<div>
<div ng-repeat="request in requestData">
{{request.name}}
<a ui-sref=".requestdetail({paramOne:request.Id})">
</a>
</div>
</div>
Test2Controller.js
var myApp = angular.module('appHome');
myApp.controller("ctrlReqSumm", ['$scope', function ($scope) {
$scope.requestData = [{
'Id': "1", 'name': "Hello",
'Id': "2", 'name': "Hi",
'Id': "3", 'name': "OK"
}]
}])
Test3.html
<div>
<label>The id is: </label> {{requestId}}
</div>
Test3Controller.js
var myApp = angular.module('appHome');
myApp.controller("ctrlRequestDetail", ['$scope', '$stateParams', function ($scope, $stateParams) {
$scope.requestId = $stateParams.paramOne;
}]);
所以我想将paramOne的值从Test2.html传递给Test3.html并显示在那里.当前参数 paramOne 显示的值为 "undefined"
请告诉我如何在这种情况下使用参数,或者是否有更好的方法来解决这个问题。
检查这个
make sure that your Usage match:
ui-sref='stateName({param: value, param: value})'
好的..我为你准备了Plunker :)
- 您代码中的主要问题是您定义
Params
属性 的位置,它应该在根级别(与url
属性 相同的级别) - 将
template: 'Test3.html',
更改为templateUrl: 'Test3.html',
- 因为
home.requestsummary.hello
按照您的定义在home.requestsummary
的子项中声明,我认为您需要将'homedetailview@home'
转化为'test2detailview@home.requestsummary'
,并具有<div ui-view="test2detailview"></div>
在 Test2.html
希望这个回答你兄弟:)
可能参数还没有解析?如果你尝试:
myApp.controller("ctrlRequestDetail", ['$rootScope', '$scope', '$stateParams', ($rootScope, $scope, $stateParams) => {
$rootScope.$on('$stateChangeSuccess', (event, toState, toParams, fromState, fromParams) => {
console.log(toParams, fromParams)
});
}]);
注意添加的 $rootScope
依赖项