在angular-ui-router中从子状态传递信息到父状态
Passing information from child state to parent state in angular-ui-router
我正在用ui-router构建一个angular应用程序,其中我有一个父视图和一个子视图。
routerApp.config(function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/home');
$stateProvider
.state('home', {
url: '/home',
templateUrl: '/views/home/home.html',
controller: 'HomeController'
})
.state('new-assignment', {
url: '/new-assignment',
templateUrl: 'new-assignment.html',
controller: 'AssignmentController'
})
.state('new-assignment.new-client', {
url: '/new-client',
templateUrl: 'new-client.html',
controller: 'ClientController'
})
;
});
子视图被用来创建一个新的客户端。因此,通过在主视图中点击"创建新客户端"。状态变为new-assignment。New-client ',显示侧视图。
当创建客户端时,我想转换回父视图'new-assignment',并传递与刚刚创建的客户端的信息。
父视图仍然可以有自己形式的数据(用于创建赋值),自然不应该被触碰。
我可以通过'$ statechangessuccess '事件来检测更改:
routerApp.controller('AssignmentController', function($scope, Assignment, Client, $log) {
$scope.clients = Client.clients;
$scope.$on('$stateChangeSuccess', function (e, toState, toParams, fromState, fromParams){
$log.log(fromState.name + ' -> ' + toState.name);
$log.log('toParams ');
$log.log(toParams);
$log.log('fromParams ');
$log.log(fromParams);
});
});
我试图通过
传递信息$state.go('^', data);
but without success…
但是我不明白如何将数据传递给父视图。什么好主意吗?
子视图范围继承自父视图的范围。在AssignmentController
中定义$scope.clients[]
数组。然后将新客户端添加到ClientController
中的数组中。
看一下这个Plunker,看看嵌套的视图作用域是如何访问它们的父视图作用域的
我将粗鲁地回答我自己的问题。
我决定使用事件消息传递:
app.controller('ClientController', function ($scope, $state, ClientService) {
$scope.save = function (newClientData) {
var ret = ClientService.create(newClientData);
if (ret) {
// Pass newly created object to parent view.
$scope.$emit('clientCreated', newClientData);
// Then go to that state (closing child view)
$log.log($state);
if ($state.current.name === 'new-client')
return $state.go('home');
$state.go('^');
}
};
});
app.controller('AssignmentController', function ($scope, Assignment, ClientService) {
$scope.clients = ClientService.clients;
$scope.$on('clientCreated', function (e, data) {
$scope.clientSelected(data);
});
$scope.clientSelected = function (client) {
$log.log(client);
$scope.data.client = client;
$scope.data.clientName = client.name;
$scope.data.clientId = client.id;
}
});
此代码链接到我的问题中的代码!
是的,各种各样的想法。
可以通过查询参数发送数据信息。将数据转换为JSON并发送如下"$state。Go ('^', data)",用"new- assignmentwww/?data"定义你的状态url。
如果数据被赋值,则可以获得信息并再次转换为对象。
其他,您可以使用"$state"访问父状态。$parent"并在控制器中赋值,然后你可以调用"$state.go('^')"。
你也可以在父状态的控制器中创建一个回调函数,在子状态的控制器中调用。
- 访问布局信息是否也会导致浏览器重排
- 事件和状态
- 获取选择框的状态
- 相位器状态未捕获参考错误
- 定义完全独立的样式信息
- 如何更改reactjs中外部/独立组件的状态或属性
- 使用html2canvas获取基本信息
- 如何使用密码检测网络中的状态连接
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 从信息框调用弹出图像库
- Ember.js-接口状态应该存储在哪里
- 混合 ui-sref 和 $state.go 在 Angular ui-router 中进行状态转换
- 使用 ajaxError 全局处理程序显示 HTTP 状态代码 401 详细信息
- Phonegap:在锁屏和下拉状态栏中显示音频控制和我的音频流的元信息
- 获取外部文件's信息(状态和大小)时出现问题
- 获取我拥有的页面的Facebook状态信息
- 在angular-ui-router中从子状态传递信息到父状态
- 存储状态信息的地方
- 有没有一种方法可以让用户在不使用我编写的应用程序的情况下访问公开的facebook信息,比如照片,状态更新
- 在' loading '子状态中的额外信息