Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 组件中的角度分辨率_Javascript_Angularjs_Angular Ui Router_Components - Fatal编程技术网

Javascript 组件中的角度分辨率

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: {

我有一个ui.router状态,在该状态下我需要解析一些数据,但它似乎在加载控制器之后和加载模板之前解析

州定义如下:

$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