2017-09-18 2 views
0

que je veux transmettre une donnée (contactName) de l'état au contrôleur par les résolutions:angulaire 1/Ui-routeur - transmettre des données de résolution au contrôleur

.state({ 
     name: 'contact.detail.overlay', 
     abstract: true, 
     component: 'overlayContent', 
     resolve: { 
     contactName: (originalContact, $rootScope, ContactService) => { 
      $rootScope.contactName = ContactService.getContactName(originalContact) 
      return $rootScope.contactName 
     } 
     } 
    }) 

sur mon état tout est correct, contactName est également correct, mais il n'est pas accessible dans mon contrôleur overlayContent, avez-vous une solution pour avoir accès $rootScope.contactName dans le contrôleur?

EDIT: Le contrôleur:

class overlayContentComponent { 

    constructor($state, $interpolate, $scope) { 
    'ngInject' 
    this.$scope = $scope 
    this.$state = $state 
    this.$interpolate = $interpolate 
    } 

    /** 
    * 
    * On initialization hook, let's check if an overlay title 
    * has been defined for the current state. 
    */ 

    $onInit() { 
    const stateData = this.$state.current.data || { title: '' } 
    this.overlayTitle = angular.isDefined(stateData.title) ? this.$interpolate(stateData.title)() : '' 
    } 
} 

export const overlayContentComponent = { 
    template: require('./overlay-content.html'), 
    controller: overlayContentComponent 
} 

Je peux accéder à contactName dans mon contrôleur par this.$scope.$root.contactName mais je voudrais éviter $scope.$root par une autre alternative

+0

Pouvez-vous poster votre contrôleur aussi s'il vous plaît? Quelle erreur, le cas échéant, montre? Utilisez-vous/* ngInject */dans votre code de résolution, ou votre application angularJS en général? – rrd

+0

@rrd Le message a été modifié avec quelques explications supplémentaires –

Répondre

0

Modifier votre constructeur:

constructor($state, $interpolate, $scope, contactName) { 
    'ngInject'; 
    // The variable you want: 
    this.contactName = contactName; 
    this.$scope = $scope 
    this.$state = $state 
    this.$interpolate = $interpolate 
} 

La résolution 'contactName' devrait être injectée maintenant, dans le contrôleur pour cet état (où la résolution réside). Cela devrait vous permettre d'y accéder dans le contrôleur, comme ci-dessus.