2013-05-22 13 views
8

Tôi gặp sự cố khi gọi một nhà máy trong một mô-đun từ một mô-đun khác. Tôi đang sử dụng angular.js + require.js. Đây là mã của tôi Học phần 1:Cách gọi nhà máy mô-đun từ mô-đun khác trong Angular.js?

define(['angular', 'app/admin/app.admin', 'app/admin/account/services'], function (angular, app, services) { 
    app.controller('MainCtrl', ['$scope', 'providerService', function ($scope, providerService) { 
    $scope.showMe = false; 
    $scope.provider = providerService.Providers; 
    }]); 


    return app; 
}); 

Mô-đun 2

define(['angular', 'app/admin/config/index'], function (angular) { 
    'use strict'; 

    var service = angular.module('app.admin.account.services', []); 

    service.factory('providerService', ['app.admin.config', 
    function (config) { 
     var providers = [ 
     { name: 'google+', url: config.AUTH_URL + '/google' }, 
     { name: 'facebook', url: config.AUTH_URL + '/facebook' } 
     ]; 
     return { 
     Providers: providers 
     }; 
    } 
    ]); 

    return service; 
}); 

Khi tôi cố gắng để gọi providerService trong mô-đun 2 từ mô-đun 1. Tôi có một lỗi nói providerService là không có. Ai đó có thể cho tôi biết tôi đã làm gì sai ở đây không?

Cheers

+2

Mô-đun ứng dụng được xác định ở đâu? Nó không có trong mã này. Nếu bạn chưa có, thì bạn cần khai báo 'app.admin.account.services' và sự phụ thuộc của' app' –

Trả lời

16

Đó là hoàn toàn tốt đẹp để sử dụng RequireJS và AngularJS với nhau, tuy nhiên thuật ngữ "mô-đun" có ý nghĩa khác nhau giữa hai và là một chút bối rối khi nói đến phụ thuộc.

Trong RequireJS một "mô-đun" là một tệp Javascript điển hình đóng gói một đoạn mã. Bạn định nghĩa các phụ thuộc bằng cách sử dụng RequireJS để truyền vào/xung quanh các mô-đun khác làm phụ thuộc và đảm bảo sắp xếp tải tập lệnh chính xác.

Trong AngularJS thuật ngữ "mô-đun" cụ thể có nghĩa là một "mô-đun" AngularJS, là một vùng chứa cho một số khai báo điều khiển/dịch vụ/chỉ thị vv.

Bạn sử dụng RequireJS để xác định thứ tự và phụ thuộc của tệp tập lệnh. Sau đó, bạn cũng cần phải nói với Angular rằng "mô-đun góc" module của bạn phụ thuộc vào, về cơ bản nhập khẩu tất cả các bộ điều khiển/dịch vụ/chỉ thị cùng với nó.

Trong 'app/admin/app.admin' chắc chắn rằng bạn xác định sự phụ thuộc cho module AngularJS của bạn bằng cách đi qua trong 'app.admin.account.services' mô-đun như một tham số thứ hai ví dụ

var app = angular.module('app.admin', ['app.admin.account.services']); 

đó sau đó sẽ nhập 'app.admin.account.services' module vào mô-đun chính của bạn làm providerService có sẵn của bạn cho dependency injection.

Các vấn đề liên quan