Angular UI路由器使用go函数在状态之间传递数据不起作用
Angular UI-Router passing data between states with go function does not work
我刚开始学习angularjs,我正在使用angular ui路由器。我正在尝试使用$state.go
将数据从一个状态发送到另一个状态,但没有成功。以下是我目前所拥有的:
我没有故意包含html,因为我认为它是不需要的。如果需要,请告诉我,我会添加它。
我已将我的状态配置如下:
$stateProvider
.state('public', {
abstract: true,
templateUrl: 'App/scripts/main/views/PublicContentParent.html'
})
.state('public.login', {
url: '/login',
templateUrl: 'App/scripts/login/views/login.html',
controller: 'loginCtrl'
})
$stateProvider
.state('private', {
abstract: true,
templateUrl: 'App/scripts/main/views/PrivateContentParent.html'
})
.state('private.visits', {
url: '/visits',
views: {
'main': {
controller: 'visitsListCtrl',
templateUrl: 'App/scripts/visits/views/VisitsList.html'
}
}
});
当调用我的LoginController
时,它将执行以下代码:
loginModule.controller('loginCtrl', ['$state', function ($scope, $state) {
$state.go('private.visits', { name : "Object"});
}]);
当private.visits
页面处于活动状态时,我正在尝试打印$stateParams
:
visitsModule.controller('visitsListCtrl', ['$stateParams',
function ($stateParams) {
console.log($stateParams);
}]);
正如状态一样,$stateParams是一个空对象。我希望它包含我在loginCtrl中传递的对象。
编辑
似乎如果private.visits
url具有此url格式'/visits/:name'
,并且我还添加了属性params:["name"],则我可以从public.login
状态访问我发送的对象。副作用是将参数添加到url中,这是合乎逻辑的。
我尝试对一个没有url的子状态做同样的事情,在这种情况下,我似乎无法访问从public.login
传递的params。
如何在子状态下发送数据?
您要做的是在private.visits
状态下定义name
参数,如:
$stateProvider
.state('public', {
abstract: true,
templateUrl: 'App/scripts/main/views/PublicContentParent.html'
})
.state('public.login', {
url: '/login',
templateUrl: 'App/scripts/login/views/login.html',
controller: 'loginCtrl'
})
$stateProvider
.state('private', {
abstract: true,
templateUrl: 'App/scripts/main/views/PrivateContentParent.html'
})
.state('private.visits', {
// NOTE!
// Previously, we were only passing params as an array
// now we are sending it as an object. If you
// send this as an array it will throw an error
// stating id.match is not a function, so we updated
// this code. For further explanation please visit this
// url http://stackoverflow.com/a/26204095/1132354
params: {'name': null},
url: '/visits',
views: {
'main': {
controller: 'visitsListCtrl',
templateUrl: 'App/scripts/visits/views/VisitsList.html',
resolve: {
name: ['$stateParams', function($stateParams) {
return $stateParams.name;
}]
}
}
}
});
然后在控制器中访问名称:
visitsModule.controller('visitsListCtrl', ['name',
function (name) {
console.log(name);
}]);
希望它能帮助你!
当您说:$state.go('private.visits', { name : "Object"});
您不是在向private.visits
状态传递数据,而是在将参数设置为private.visits
状态,因为您在状态配置中没有为其定义参数,所以它甚至不支持参数。如果您想在使用服务的州之间共享数据,或者如果您的州具有父子关系,则子州将可以访问父州的数据。考虑到你不希望数据在你的URL中传播,我会使用一个服务(getters/ssetters(来实现这一点。
- 在Knockoutjs中的ViewModels之间共享变量状态
- 设置两个反应组件之间状态的正确方式
- new Datamap() 在调用之间保持内存的共享状态
- 在aspx页面c#之间传递/引用/发送变量/会话状态
- angular ui路由器卡在两个状态之间
- 在角度上不同控制器之间共享状态
- 两个类之间的状态
- UI 路由器 - 在状态之间转换时记住滚动位置
- 在 React/Redux 中管理同级组件之间的滚动状态
- 在状态之间传递对象
- JavaScript-使用sessionStorage保存文档之间共享的复选框状态
- 小黄瓜-在场景之间保持状态
- Ember JS中控制器之间共享状态的正确方式
- 如何在 CSS3 中的动画之间保持状态
- 使秒表在请求之间处于活动状态
- 在两个组件之间传输状态
- 如何使用 Angular JS 在状态之间导航
- 在两个或多个 UL 列表之间切换,如果单击一个列表,则其他列表会自动以初始状态返回,就像从未单击过一样
- 离子 - 在状态之间移动时,页面内容位于屏幕外部
- 如何在路由更改之间维护视图(控制器)状态