Javascript 组件中的角度分辨率
我有一个ui.router状态,在该状态下我需要解析一些数据,但它似乎在加载控制器之后和加载模板之前解析 州定义如下:Javascript 组件中的角度分辨率,javascript,angularjs,angular-ui-router,components,Javascript,Angularjs,Angular Ui Router,Components,我有一个ui.router状态,在该状态下我需要解析一些数据,但它似乎在加载控制器之后和加载模板之前解析 州定义如下: $stateProvider .state( 'route', { url: '/update/:id', template: '<update order="$resolve.order"></update>', resolve: {
$stateProvider
.state( 'route', {
url: '/update/:id',
template: '<update order="$resolve.order"></update>',
resolve: {
order: function( OrdersService, $stateParams ) {
return OrdersService.get( $stateParams.id ).$promise
}
}
} )
订单服务:
class OrdersService {
constructor( $resource, api_name ) {
this.$resource = $resource( api_name + '/orders/:id', { id: '@id' }, {
get: { method: 'GET' }
} );
}
get( orderId ) {
return this.$resource.get( { orderId } );
}
}
angular.module( 'app' )
.factory( 'OrdersService', [
'$resource',
'api_name',
( $resource, api_name ) => new OrdersService( $resource, api_name )
] );
所有导入都很好,我仍然从controller获得以下内容,并在模板中获得完整数据
console.log(this.order) // undefined
另外,我在控制器构造函数中调用console.log(this.order,this)
时发现了一些奇怪的行为。它打印到控制台
undefined OrderUpdateCtrl
$stateParams:Object
OrdersService:OrdersService
order:Resource // full resolved object
__proto__:Object
已在中描述:
您可以使用resolve
向控制器提供内容或数据
这是国家的习俗resolve
是一个可选的
应注入控制器的依赖项。
因此,您需要在ui路由器状态的控制器中注入
命令。您正在观察的行为是有意义的。您的console.log
调用位于控制器的构造函数内,您没有提供Angular可用于注入顺序的参数,从而使构造函数可用
Angular实际上是在更新控制器之前解析order
,但在控制器对象存在之前,它无法向控制器添加$resolve.order。因此,order
将不存在于构造函数中,而是在呈现模板之前存在
您的OrdersService也有问题。您的get
函数从不传递id
参数(它传递的是未在路由中定义的orderId
)。很可能,您的API永远不会被正确调用。将参数对象更改为{id:orderId}
,您应该状态良好。在此处找到答案
我应该使用$onChanges钩子等待承诺得到解决您能提供OrdersService.get
和controller的实现吗?注入组件控制器会给出一个未知的提供者:ordersprovider Correct。注入组件控制器将不起作用,因为没有订单
服务。如果您将数据注入到状态控制器中,请将行this.order=order
添加到构造函数中,以使数据通过绑定可供组件使用。请参阅下面我的答案。我已更新了我的答案,您需要在ui路由器状态的控制器中注入顺序
“路由”
,然后将其传递给指令的控制器。@ByronJones@Andrea,不幸的是,这不起作用,我将顺序
注入状态控制器,然后通过绑定到组件,不知何故,它在controller模板:“,
controller:function(order){
this.order=order;
解析:{…}
@Onefivefournine,我猜您的控制器/组件仍然存在问题;看我更新的答案。哦,这只是一个打字错误。我把代码简化后才放在这里
console.log(this.order) // undefined
undefined OrderUpdateCtrl
$stateParams:Object
OrdersService:OrdersService
order:Resource // full resolved object
__proto__:Object