0

したがって、UI-router の解決は angular 1 の美しさでした。

$stateProvider.state('myState', {
      resolve:{
          myVarFromResolve: function(){
              return 'test'; 
          }
      }
   })

  controller: function($scope, myVar){
      $scope.myVar= myVarFromResolve;
      if(true){console.log($scope.myVar}; //logs 'test'
  }

Angular 1.5 で同じことを行うにはどうすればよいですか。コンポーネント(下の例)?

export default function FooComponent() {
  let fooComponent = {
    restrict: 'E',
    templateUrl: 'foo.html',
    controller: controller,
    controllerAs: 'foo',
    bindToController: true,
  };

  return landingComponent;
}

そして決意…

.state('fooState', {
  parent: 'someParent',
  url: '/fooUrl',
  template: '<foo></foo>',
  resolve:{
       myVarFromResolve: function(){
           return 'test'; 
       }
    }
})

これを行う方法についてのガイドを読みましたが、よくわかりません。機能が完全には整っていないようで、それはハックです。

4

1 に答える 1

0

答えは「はい、ちょっと」のようです...

この問題の回避策は、で働くチームメンバーから提供されました(バージョンをすばやく確認するためにangular-ui-router 0.2.18使用してください)。npm list angular-ui-router --depth=0ES6クラスを使用している間は機能します。

回避策は、コンポーネント アーキテクチャが 1.5 で導入される前の Angular 1 のように、変数をコントローラーに渡す (簡単な/既知の) 方法がないという事実に基づいています。代わりに、promise を作成する (または http 呼び出しを返す) サービス メソッドを作成します。次に、単に約束を解決に入れます。promise メソッドは、コントローラーがロードされる前に戻ります。したがって、使いやすい var はありませんが、必要なデータはサービスに含まれています。

  resolve: {
    preloadSomeVariableIntoAService: function (MyExampleService) {
      return MyExampleService.presetSomeVariable();
    }
  //Note that 'preloadSomeVariableIntoAService' won't be used anywhere in our case
  }

サービスは次のようになります。

export default class MyExampleService {

  constructor( $q ) {
    this.q =  $q;
    this.myVariableFromResolve = undefined;
  }

  presetStreamStatus(){

    var deferred = this.q.defer();

    return $http.get(someUrl).then(response) => {
          this.myVariableFromResolve = response.data;
          deferred.resolve(events);
        });

    return deferred;

  };

};

その後、サービスから取得できるようになりmyVariableFromResolveます。$q deferred を使用する必要があるかどうかはわかりませんが、単に呼び出しを返すだけでなく、変数も設定しているため、必要なようです。わからない。これが誰かに役立つことを願っています。

于 2016-10-17T21:23:38.797 に答える