2016-05-12 6 views
1

ルーティングのためのファクトリを作成したいとします。あるページから別のページに情報を交換したいので、これを工場でカプセル化したいと思います。これがベストプラクティスかどうかはわかりません。他に良い方法があるかどうか教えてください。工場内のAngularJSルーティング

これは私のコントローラである:上記のコードで

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'); 
      }); 
     }; 
    }; 
}]); 

、私はコントローラに2つのカスタム作られた工場を注入しました。 "ShowService"は正常に動作しますが、 "ChangeViews"はエラーを返します。

コントローラ内の$ locationサービス(コメント行)を使用すると機能します。

工場出荷時のコードは次のとおりです。

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; 
} 

HTMLテンプレートへのパスがルーティングされます。 ChangeViews工場を注入するときに私が受けてる エラーがある:私は何をしないのだ

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

はあなたに

+0

をあなたはChangeViewsの工場が含まれているあなたのjsファイルをリンクしていないとき、通常これが起こります。そのファイルを角リンクの後のindex.htmlファイルにリンクしてください –

+0

'view'サービスはどこで定義しますか?私はどこにもないと思います - したがってエラーです。 – dfsq

+0

@ WildWidowリンクされています。工場コードで見られるように、ShowServiceは同じファイルにあります(私は完全なコードを貼り付けませんでした)。コントローラでは、問題なくShowServicesを使用できます。 – florin

答えて

1

ありがとう問題は、あなたがviewという名前の注射サービス、したがって、未知のプロバイダエラーを持っていないということです。

changeViewsパラメータのリストからviewを削除します。

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

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

    return data; 
} 
+0

それは働いた。今私は間違いをどこでやったのか理解しています。ありがとうございました – florin

関連する問題