【问题标题】:AngularJS routing inside a factory工厂内的AngularJS路由
【发布时间】:2016-09-07 22:46:40
【问题描述】:

我想为路由目的创建一个工厂。我想将其封装在工厂中,因为我想将信息从一个页面交换到另一个页面。我不知道这是否是最佳做法。请告诉我是否有其他更好的方法。

这是我的控制器:

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

在上面的代码中,我将两个定制工厂注入到控制器中。 “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

我错过了什么?

谢谢

【问题讨论】:

  • 当你没有链接你的包含 ChangeViews 工厂的 js 文件时,通常会发生这种情况。在角度链接之后将该文件链接到您的 index.html 文件
  • 你在哪里定义view服务?我猜无处 - 因此错误。
  • @WildWidow 它们已链接。正如您在工厂代码中看到的,ShowService 在同一个文件中(我没有粘贴完整的代码)。在控制器中,我可以毫无问题地使用 ShowServices。

标签: angularjs angular-services ngroute angular-controller


【解决方案1】:

问题是您没有名为view 的可注入服务,因此出现未知提供程序错误。

changeViews参数列表中删除view

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

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

    return data;
}

【讨论】:

  • 成功了。现在我也明白我在哪里做错了。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-23
  • 2017-04-18
  • 2015-11-20
  • 2014-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多