2016-05-12 12 views
1

Ich möchte eine Fabrik für Routing-Zwecke erstellen. Ich möchte das in einer Fabrik einkapseln, weil ich Informationen von einer Seite zur anderen austauschen möchte. Ich weiß nicht, ob dies die beste Vorgehensweise ist. Bitte sagen Sie mir, ob es andere bessere Möglichkeiten gibt.AngularJS Routing innerhalb einer Fabrik

Das ist mein Controller ist:

angular.module('app.core') 
.controller('mainCtrl', ['ShowService', 'ChangeViews', function(ShowService, ChangeViews){ 
    var vm = this; 
    vm.namespaces = []; 
    vm.servers = []; 
    vm.p4path = ''; 
    vm.gitpckname = ''; 
    vm.server = ''; 
    vm.ns = ''; 

    ShowService.getNamespaces().then(function(response){ 
     var data = angular.fromJson(response.data); 
     angular.forEach(data.namespaces, function(value){ 
      vm.namespaces.push(value); 
      vm.initNamespaceSelVal = vm.namespaces[0]; 
      vm.ns = vm.namespaces[0]; 
     }); 
    }); 

    ShowService.getServers().then(function(response){ 
     var data = angular.fromJson(response.data); 
     angular.forEach(data.servers, function(value){ 
      vm.servers.push(value); 
      vm.initServerSelVal = vm.servers[0]; 
      vm.server = vm.servers[0]; 
     }); 
    }); 

    vm.doClick = function(value){ 
     if(value){ 
      var body = {}; 
      body['server'] = vm.server; 
      body['p4path'] = vm.p4path; 
      body['packagename'] = vm.gitpckname; 
      body['namespace'] = vm.ns; 
      ShowService.getBraches(body).then(function(response){ 
       console.log(response); 
       //$location.path('/hidden'); 
       //ChangeViews.changeView('/hidden'); 
      }); 
     }; 
    }; 
}]); 

In dem obigen Code injiziert ich zwei Maß Fabriken in den Controller. Der "ShowService" funktioniert ordnungsgemäß, aber die "ChangeViews" gibt einige Fehler zurück.

Die Verwendung von $ location service im Controller (die kommentierte Zeile) funktioniert.

Der Werkscode ist:

angular 
    .module('app.services') 
    .constant('BASE_URL', 'http://localhost:8066') 
    .factory('ShowService', dataService) 
    .factory('ChangeViews', changeViews); 

function dataService($http, BASE_URL){.....} 
function changeViews($location, view){ 
    var data = { 
     'changeView': changeView, 
    }; 

    function changeView(view){ 
     return $location.path(view); 
    }; 

    return data; 
} 

Der Pfad zur HTML-Vorlage geleitet wird. Der Fehler, den ich empfangen werde, wenn die ChangeViews Fabrik Injektion ist:

"Error: [$injector:unpr] http://errors.angularjs.org/1.5.5/$injector/unpr?p0=viewProvider%20%3C-%20view%20%3C-%20ChangeViews 

Was fehlt mir?

Danke

+0

dies in der Regel passiert, wenn Sie stellen keine Verbindung zwischen Ihrem js-Datei, die die ChangeViews Werk enthält. Verknüpfen Sie diese Datei mit Ihrer index.html-Datei nach dem eckigen Link –

+0

Wo definieren Sie den 'view' Service? Ich denke nirgends - daher der Fehler. – dfsq

+0

@WildWidow sie sind verknüpft. Wie Sie im Factory-Code sehen, befindet sich der ShowService in derselben Datei (ich habe den vollständigen Code nicht eingefügt). Im Controller kann ich die ShowServices ohne Probleme verwenden. – florin

Antwort

1

Das Problem ist, dass Sie nicht injizierbare Service view, daher auch den unbekannten Provider Fehler genannt haben.

view aus changeViews Parameter Liste entfernen:

function changeViews($location) { 
    var data = { 
     changeView: changeView 
    }; 

    function changeView(view) { 
     return $location.path(view); 
    }; 

    return data; 
} 
+0

Es hat funktioniert. Jetzt verstehe ich auch, wo ich den Fehler gemacht habe. Vielen Dank – florin