2017-06-29 12 views
0

angularJSでプロパティ注入を使用できますか?
angularJSコントローラの特性注入

シナリオは、私は、これは

app 
    .module('myapp') 
    .config(function($stateProvider) { 
     $stateProvider.state('the-state', { 
      url: '/the/url', 
      templateUrl: 'view.html', 
      controller: 'ctrl', 
      controllerAs: 'vm', 
      resolve: { 
       'boolFlag': function(service){return service.getBoolean();} 
      } 
     }); 
    }) 
    .service('service', function(){ 
     this.getBoolean = function() {return ...}; 
    }) 
    .controller('ctrl', function(boolFlag) { 
     this.boolFlag = boolFlag; 

     this.execute = function(){...}; 
    }); 


<div ng-show="vm.boolFalg"> 
    simple dynamic content 
</div> 
<button type="button" ng-click="vm.execute()">Click Me</button> 

に動作します知っている。しかし、それは漏れやすい感じ。 boolFlag`はコンテンツを表示/非表示するためにのみビュー内で使用されます。私はコントローラを解決し、コントローラインスタンスのboolFlagプロパティを設定する方法はありますか?私はプロバイダや工場が行く方法だと思っていますが、私はそれを理解しようとしているサークルで回っています。

私はそれは私もこのことについて間違った道を進んですることができ

app 
    .module('myapp') 
    .config(function($stateProvider) { 
     $stateProvider.state('the-state', { 
      url: '/the/url', 
      templateUrl: 'view.html', 
      controller: 'ctrl', 
      controllerAs: 'vm', 
     }); 
    }) 
    .provider('ctrlProvider', function(ctrlProvider, service) { 
     var ctrl = ctrlProvider.$get/invoke/build/create(); 

     ctrl.boolFlag = service.getBoolean(); 

     return ctrl; 
    }) 
    .service('service', function(){ 
     this.getBoolean = function() {return ...}; 
    }) 
    .controller('ctrl', function() { 
     this.execute = function(){...}; 
    }); 

ようになります想像します。多くのコントローラにはboolFlagプロパティが必要です。たぶん$parentScopeの一部になるはずですか?しかし、私はそれをコード化する方法を知らない。

更新 私はこの最後の夜について考えていました。 boolFlagは、コントローラにまったく関連付ける必要はありません。それはスコープの一部である必要があります。 $scope.boolFlag = service.getBoolean();

質問があれば、コントローラなしで$ scopeをどのように設定できますか?

答えて

0

boolFlagの値を維持してコントローラ間で共有できるようにfactoryを使用できます。 $ parentScopeの使用を避ける方がよいでしょう。 Thisでは、それを進める方法が説明されています。ファクトリの値を最初に設定する必要がある場合は、その値を設定するために、メインモジュールのapp.configで初期値を使用することもできます。

+0

ありがとうございます。私の最終的な目標は、ビューにのみ必要なので、コントローラに値を注入しないようにすることでした。これについてさらに考えてみると、スコープ内にboolFlagだけが必要です。コントローラーではありません。では、明示的にコントローラーを経由せずにスコープにデータを挿入するにはどうすればよいですか? –

関連する問題