2017-08-03 11 views
0

angular ui routerを使用しています。コントローラのコンストラクタに$scopeとプリフェッチされたデータを注入する必要があります。

解決策オブジェクトに約束を追加するだけで、私が$scopeサービスを注射可能な角度uiルータのリストに追加するとすぐに、解決することができません。

作業typescriptですコード:

$stateProvider.state('parent.child', { 
    url: '/child', 
    template: 'I am the child state', 
    controller: 'TestController', 
    controllerAs: 'vm', 
    resolve: {     
     viewModel:initializeControllerViewModel 
    } 
}); 

initializeControllerViewModel.$inject = [ 
    '$stateParams', 
    '$q', 
    '$timeout' 
]; 

function initializeControllerViewModel(
    $stateParams: ng.ui.IStateParamsService, 
    $q: ng.IQService, 
    $timeout:ng.ITimeoutService) 
{ 
    let deferred = $q.defer(); 

    $timeout(() => 
    { 
     deferred.resolve({ 
      property1: 'foo' 
     }); 
    }, 500); 

    return deferred.promise;  
} 

class TestController 
{ 
    constructor(
     viewModel: any) 
    {    
     //viewModel should be {property1: 'foo'} 
    } 
} 

に動作していないコード:

$stateProvider.state('parent.child', { 
    url: '/child', 
    template: 'I am the child state', 
    controller: 'TestController', 
    controllerAs: 'vm', 
    resolve: { 
     '$scope': '$scope', 
     viewModel:initializeControllerViewModel 
    } 
}); 

class TestController 
{ 
    constructor(
     $scope: ng.IScope, 
     viewModel: any) 
    { 
     //$scope should be injected 
     //viewModel should be {property1: 'foo'} 
    } 
} 

答えて

0

がUIルータからスコープを削除し、$があなたのクラスのプロパティを注入使用してみてください

class TestController 
{ 
public static $inject = ['$scope', 'viewModel']; 
constructor(
     $scope: ng.IScope, 
     viewModel: any) 
    { 
     //$scope should be injected 
     //viewModel should be {property1: 'foo'} 
    } 
} 
+0

私がいることを試してみました前に '$ scope'変数が正しく注入されていますが、' viewModel'は 'undefined'の値を持っています –

+0

'viewModel'を$ injectに追加しましたか? – Vitalii

+0

いいえ私は問題を解決して追加しました。あなたの答えを更新してください。私はそれを受け入れます。 –

関連する問題