2015-05-29 15 views
1

app1.js
這樣angularJS文件

定義一些service app1.js

angular.module('todoApp.services', []).factory('TodoService', function($http, $location) { 
    ┊ return { 
    ┊ ┊ send: function(url, par) { 
    ┊ ┊ ┊ return $http.get(url, { 
    ┊ ┊ ┊ ┊ params: par 
    ┊ ┊ ┊ }); 
    ┊ ┊ }, 
    ┊ ┊ get_default_data: function($scope, url, par) { 
    ┊ ┊ ┊ this.send(url, par).success(function(data) { 
    ┊ ┊ ┊ ┊ $scope.data = data; 
    ┊ ┊ ┊ }); 
    ┊ ┊ }, 
    ┊ ┊ change_status: function($scope, url, par) { 
    ┊ ┊ ┊ this.send(url, par).success(function() { 
    ┊ ┊ ┊ ┊ angular.forEach($scope.data, function(item) { 
    ┊ ┊ ┊ ┊ ┊ if (item.id === par.sid) { 
    ┊ ┊ ┊ ┊ ┊ ┊ item.status = par.status; 
    ┊ ┊ ┊ ┊ ┊ } 
    ┊ ┊ ┊ ┊ }); 
    ┊ ┊ ┊ }); 
    ┊ ┊ }, 
    }) 

,我怎麼能在另一個.js使用todoApp.services文件?
我使用這樣

app2.js

angular.module('myapp', ['todoApp.services']) 

它不工作,我該如何使用呢?

+0

你說的「不行」是什麼意思?你有沒有包含你的service-js文件? – Rouby

回答

1

我只需將應用程序模塊的服務關閉,然後將服務注入到帶有DI的控制器中。

app.js

(function() { 

    angular.module('app', []); 

})(); 

app.services.js

(function() { 

    function appService() { 
     // service code 
    } 

    angular.module('app') 
     .factory('appService', appService);   

})(); 

app.controller.js

(function() { 

    function appController(appService) { 
     // controller code 
    } 

    angular.module('app') 
     .controller('appController', appController);   

})(); 

這會給你你的控制器內的工廠數據。

+0

我必須把它們寫在一個文件中? – nataila

+0

不,當然不是。讓我更新我的代碼。 –

0
var myApp = angular.module('myApp', []); 
    myApp.factory('myService', function() { 
     return { 
      myFunction: function() { 
       alert("I'm foo!"); 
      } 
     }; 
    }); 

在rootcope上定義服務。在任何控制器

myApp.run(function($rootScope, myService) { 
     $rootScope.appData = myService; 
    }); 

接入服務:

myApp.controller('MainCtrl', ['$scope', function($scope){ 
     $scope.appData.myFunction(); 
    }]); 
+0

附加東西到$ rootScope只是不好的做法 – sirrocco

+0

你不需要將服務附加到rootScope。這也是一個不好的做法,因爲您希望儘可能少地使用rootScope。只需將應用程序模塊的工廠設置並注入控制器就足以將其傳遞給應用程序。 –

+0

這真的不是一個服務應該如何建立.. – Billy

2

根據你當前的實現已宣佈todoApp.services模塊中有一個工廠,您所定義的todoApp.services依賴於myapp這知府。

然而,你應該返回從服務承諾,而不是操縱$scope

angular.module('todoApp.services', []).factory('TodoService', function($http, $location) { 
    return { 
     get_default_data: function() { 
      return $http.get(url, par) 
     } 
    } 
}) 

要使用就得injcet服務到您的位指示

myApp.controller('MainCtrl', ['TodoService', '$scope', function(TodoService, $scope){ 

    //Call the service method 
    TodoService.get_default_data().then(function(){ 
     $scope.data = data; 
    });  
}]);