2014-01-27 3 views
2

Я загружаю toastr.js с require.js в мой угловой проект, но он недоступен в качестве глобальной переменной.toastr undefined with requirejs

Это main.js:

require.config({ 
    baseUrl: 'js', 
    paths: { 
    domReady: '../lib/requirejs-domready/domReady', 
    jquery: '../lib/jquery/jquery', 
    jqueryValidate: '../lib/jquery.validation/jquery.validate', 
    underscore: '../lib/underscore/underscore', 
    bootstrap: '../lib/bootstrap/dist/js/bootstrap', 
    moment: '../lib/momentjs/moment', 
    toastr: '../lib/toastr/toastr', 
    angular: '../lib/angular/angular', 
    ngAnimate: '../lib/angular-animate/angular-animate', 
    'ui.router': '../lib/angular-ui-router/release/angular-ui-router', 
    'chieffancypants.loadingBar': '../lib/angular-loading-bar/build/loading-bar', 
    uuid4: '../lib/angular-uuid4/angular-uuid4', 
    'ui.bootstrap': '../lib/angular-bootstrap/ui-bootstrap', 
    'ui.bootstrap.tpls': '../lib/angular-bootstrap/ui-bootstrap-tpls', 
    xeditable: '../lib/angular-xeditable/dist/js/xeditable', 
    Restangular: '../lib/restangular/dist/restangular', 
    ngCookies: '../lib/angular-cookies/angular-cookies' 
    }, 
    shim: { 
    angular: { 
     exports: 'angular' 
    }, 
    Restangular: { 
     deps: ["underscore", "angular"] 
    }, 
    'ui.router': { 
     deps: ['angular'] 
    }, 
    'ui.bootstrap': { 
     deps: ['angular', 'ui.bootstrap.tpls'] 
    }, 
    underscore: { 
     exports: '_' 
    }, 
    bootstrap: { 
     deps: ['jquery'] 
    }, 
    toastr: { 
     deps: ['jquery'], 
     exports: 'toastr' 
    }, 
    jquery: { 
     exports: 'jquery' 
    } 
    }, 
    deps: ['boot'] 
}); 

boot.js:

define([ 
    'require', 
    'angular', 
    'bootstrap', 
    'app' 
], function (require, ng) { 

    'use strict'; 

    require(['domReady!'], function (document) { 
    ng.bootstrap(document, ['wb']); 
    }); 

}); 

Здесь вы модуль необходим в app.js. Он опирается на toastr:

define([ 
    'angular', 
    'ui.router', 
    'ngCookies', 
    'toastr' 
], function (ng) { 

    'use strict'; 

    var module = ng.module('wb.common', [ 
    'ui.router', 
    'ngCookies' 
    ]); 

    return module; 

}); 

Я вижу toastr.js загружены, но не создается в качестве глобальной переменной. Так что window.toastr не определено. Я экспортирую в toasr в shim ...

Любые идеи, почему taostr недоступен в качестве глобальной переменной?

Благодаря

ответ

6

Ничего, глядя на источник toastr (конец toastr.js), он делает себя доступен как модуль. Служба помощи toastr, необходимое для перехода от:

define(['../module'], function (module) { 

    'use strict'; 

    module.factory('NotifierSvc', ['$log', function ($log) { 
    return { 
     info: function (msg) { 
     toastr.info(msg); 
     $log.info(msg); 
     }, 
     warning: function (msg) { 
     toastr.warning(msg); 
     $log.warn(msg); 
     }, 
     error: function (msg) { 
     toastr.error(msg); 
     $log.error(msg); 
     }, 
     success: function (msg) { 
     toastr.success(msg); 
     $log.log(msg); 
     } 
    } 
    }]); 

}); 

к этому:

define(['../module', 'toastr'], function (module, toastr) { 

    'use strict'; 

    module.factory('NotifierSvc', ['$log', function ($log) { 
    return { 
     info: function (msg) { 
     toastr.info(msg); 
     $log.info(msg); 
     }, 
     warning: function (msg) { 
     toastr.warning(msg); 
     $log.warn(msg); 
     }, 
     error: function (msg) { 
     toastr.error(msg); 
     $log.error(msg); 
     }, 
     success: function (msg) { 
     toastr.success(msg); 
     $log.log(msg); 
     } 
    } 
    }]); 

});