在app.config中注入服务[在单独的文件中声明]或在控制器中使用它

时间:2015-09-03 19:42:04

标签: angularjs angularjs-service

我正在尝试使用here to show routes only when a promise is TRUE

中的代码

我正在关注我的目录结构

app
 - Orders
   -orders.html
   -OrderController.js
   -OrderService.js

主要配置 [app.js]

var myApp = angular.module('myApp', ['ngRoute','ngAnimate','ui.bootstrap','myApp.OrderController']);
myApp.config(function($routeProvider, $locationProvider){
 $locationProvider.html5Mode({
  enabled: true,
  requireBase: false
});
  $routeProvider
  .when('/orders', {
    templateUrl: 'orders/orders.html',
    controller: 'OrderController',
    resolve:{
        customerExpenses: function(OrderService){
            return OrderService.getOrders($route.current.params.customerName);
        }
    }
  })
})

OrderService.js

angular.module('myApp').factory('OrderService', ['$http', function($http) {
  var sdo = {
    getNames: function() {
      var promise = $http({ 
        method: 'GET', 
        url: ''
      });
      promise.success(function(data, status, headers, conf) {
        return data;
      });
      return promise;
    }
  }
  return sdo;
}]);

我已尝试hereAccepted回答,以及其他SO文章的建议之一

angular.module('myApp')
  .service('FooService', function(){
    //...etc
  })
  .config(function(FooServiceProvider){
    //...etc
  });

由于我的服务位于不同的文件中,因此我尝试确定是否可以在app.js文件中使用它而不使用provider,或者这是在app.config中使用服务的唯一方法?

更新1: 如果我想在控制器中使用该服务

angular.module('myApp.OrderController',[]).controller('OrderController', function ($scope) {
    $scope.displayed=[];
    $scope.displayed.push(OrderService.getNames());
});

OrderService无法使用

试过这个:

angular.module('myApp.OrderController',[]).controller('OrderController', ['$scope','OrderService',function ($scope) {
    $scope.displayed=[];
    $scope.displayed.push(OrderService.getNames());
}]);

示例:

angular.
module('myServiceModule', []).
 controller('MyController', ['$scope','notify', function ($scope, notify) {
   $scope.callNotify = function(msg) {
     notify(msg);
   };
 }]).
factory('notify', ['$window', function(win) {
   var msgs = [];
   return function(msg) {
     msgs.push(msg);
     if (msgs.length == 3) {
       win.alert(msgs.join("\n"));
       msgs = [];
     }
   };
 }]);

但无法使用我的服务。我的控制器和服务在不同的文件中

我在这里添加了这个问题,因为我觉得它们有些相关。

1 个答案:

答案 0 :(得分:0)

您尚未注入服务OrderService,请在第一行更改代码

var myApp = angular.module('myApp', ['ngRoute','ngAnimate', ....'OrderService'])
myApp.config(function($routeProvider, $locationProvider, OrderService){
....
})

其余代码看起来不错