Angular-ui-router beheben, Wert als Zeichenfolge

Mit ui-router, füge ich alle beheben Logik im staatlichen Funktion wie diese;

    //my-ctrl.js
    var MyCtrl = function($scope, customers) {
      $scope.customers = customers;
    }

    //routing.js
    $stateProvider.state('customers.show', {
      url: '/customers/:id',
      template: template,
      controller: 'MyCtrl',
      resolve: {   //<-- I feel this must define as like controller
        customers: function(Customer, $stateParams) {
          return Customer.get($stateParams.id);
        }
      }
    });

Aber IMO resolve Objekt gehören ein controller, und es ist leicht zu Lesen und zu pflegen, wenn es definiert ist, innerhalb einer controller-Datei.

    //my-ctrl.js
    var MyCtrl = function($scope, customers) {
      $scope.customers = customers;
    }
    MyCtrl.resolve = {
      customers: function(Customer, $stateParams) {
        return Customer.get($stateParams.id);
      };
    };

    //routing.js
    $stateProvider.state('customers.show', {
      url: '/customers/:id',
      template: template,
      controller: 'MyCtrl',
      resolve: 'MyCtrl.resolve'   //<--- Error: 'invocables' must be an object.
    });

Jedoch, Wenn ich es definieren als MyCtrl.resolve wegen IIFE, bekomme ich die folgende Fehlermeldung.

Failed to instantiate module due to: ReferenceError: MyCtrl is not defined

Wenn ich definieren, dass man als string 'MyCtrl.resolve', bekomme ich diese

Error: 'invocables' must be an object.

Ich sehe, der controller ist definiert als string, so dass ich denke, es ist auch möglich, den Wert als string, indem ein decorator oder so etwas.

Hat jemand dies getan, Ansatz? So dass ich halten kann meine routings.js reinigen Sie und setzen entsprechende Infos. in eine entsprechende Datei?

  • Wie bereits erwähnt, der controller ist noch nicht verfügbar an dieser Stelle. Die design-Muster, das ich nutzen einen Resolver service. Mit this.self.name im auflösen von Funktionen Gültigkeitsbereich (wo Sie Ihre Customer.get() Anfrage), können Sie den Namen des Staates. Dann, etwas wie return Resolver.prepare( this.self.name ) können Sie extrahieren alle Logik in Resolver, und reduzieren Sie Ihre code, um eine einzige (und gleiche) line-in Ihrem Zustand-Deklarationen.
InformationsquelleAutor allenhwkim | 2015-06-12
Schreibe einen Kommentar