2017-06-29 6 views
0

Ist es möglich, Eigenschaft Injektion in angularJS zu verwenden?angularJS Controller Eigenschaft Injektion

Szenario
Ich weiß, das

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> 

arbeiten Aber es fühlt sich undicht. boolFlag` wird nur in der Ansicht zum Ein-/Ausblenden von Inhalten verwendet. Wie kann ich den Controller auflösen und die Eigenschaft boolFlag auf der Controller-Instanz setzen? Ich gehe davon aus, dass Anbieter oder Fabriken der richtige Weg wären, aber ich gehe im Kreis herum und versuche, einen Sinn daraus zu machen.

stelle ich mir es so etwas wie

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(){...}; 
    }); 

ich auch darüber gehen könnte den falschen Weg aussehen würde. Viele Controller benötigen die Eigenschaft boolFlag. Vielleicht sollte es Teil eines $parentScope sein? Aber ich weiß nicht, wie ich das programmieren soll.

Update Ich dachte letzte Nacht mehr darüber nach. Das boolFlag muss dem Controller überhaupt nicht zugeordnet werden. Es muss nur Teil des Umfangs sein. $scope.boolFlag = service.getBoolean();

Die Frage wird dann, wie kann ich $ Scope ohne den Controller bevölkern?

Antwort

0

Sie könnten Factory verwenden, um den Wert von boolFlag so zu pflegen, dass er von den Controllern gemeinsam genutzt wird. Es ist besser, $ parentScope zu vermeiden. This erklärt, wie man damit fortfährt. Wenn Sie den Wert von factory zunächst festlegen müssen, können Sie ihn auch in app.config Ihres Hauptmoduls verwenden, um seinen Wert festzulegen.

+0

Vielen Dank. Mein Endziel war, den Wert überhaupt nicht in den Controller zu injizieren, da er nur in der Ansicht benötigt wird. Wenn ich weiter darüber nachdenke, brauche ich nur boolFlag im Umfang. nicht der Controller. Wie bevölkere ich den Scope, ohne den Controller explizit zu durchlaufen? –

Verwandte Themen