我有一个客户管理界面,我正在尝试使用ui-router编写。我将某些州设置为
"csp"
"csp.search"
"csp.customer"
"csp.customer.details"
"csp.customer.status"
如何使用ui-router
的{{1}} $state
获取data
结果,并将其提供给csp.search
和/或{{的其余部分1}?据我了解,数据需要在最近的共同祖先csp
上,但我找不到简单/干净的方法。
我知道我可以将所有内容都设为csp.customer
的子状态,以便他们继承csp
。我也可以在csp.search
之前解析$state.current.data
的第一个名字,但这有多普遍?更进一步,我想我可以写一些爬上祖先($state.current.name
)的东西,直到找到一些“最顶层”的信号,但我不知道应该是什么。
是否有更优雅的Angular解决方案?
编辑:在给定已知状态的情况下,可能会询问相同的问题,例如: .
,如何从任何控制器向其添加数据?
答案 0 :(得分:1)
您的csp.search
结果将在$ scope上。如果其他控制器中的$ scope需要共享该$ scope引用的模型/状态/数据,请通过注册角度服务来使用单例对象实例。可以将一个工厂注入到任意数量的控制器中,然后一切都可以解决这个问题的真相。
下面是一个工厂的简单演示,它使用ui-router http://plnkr.co/edit/P2UudS?p=preview在控制器之间共享一个Object(仅限左侧标签)
工厂&控制器:
app.factory('uiFieldState', function () {
return {uiObject: {data: null}}
});
app.controller('NavbarCtrl', ['$scope', 'uiFieldState', '$stateParams', '$state',
function($scope, uiFieldState, $stateParams, $state) {
$scope.selected = uiFieldState.uiObject;
}
]);
app.controller('LeftTabACtrl', ['$scope', 'uiFieldState', '$stateParams', '$state',
function($scope, uiFieldState, $stateParams, $state) {
$scope.selected2 = uiFieldState.uiObject;
}
]);
工厂对象{uiObject: {data: null}}
通过uiFieldState
&注入控制器。然后简单$scope.selected = uiFieldState.uiObject;
用于将工厂连接到范围ng-model="selected.data"
。
这是一个关于angularJS服务的非常好的教程:http://ng-newsletter.com/posts/beginner2expert-services.html