如何使用AngularJS和RequireJS设置Skrollr.js

时间:2015-01-25 02:20:17

标签: javascript angularjs requirejs skrollr angular-directive

我在使用AngularJS& amp;设置Skrollr时遇到了困难。 RequirejS。

有些文章建议将Skrollr设置为指令,这就是我一直关注的方法。不幸的是,Skrollr无法初始化。具体来说,当我尝试从指令调用skrollr.init()时,我得到一个错误,说明没有定义skrollr。

以下是我的代码:

directives.js

define(['directivesFactory', 'skrollr'], function(directivesFactory){

directivesFactory.directive('skrollr', [function(){  
    var directiveDefinitionObject = {
        link: function() {
            skrollr.init();
        }
    };

    return directiveDefinitionObject;
}]);
});

main.js

(function() {

'use strict';

require.config({
    baseUrl: 'js',
    paths: {
        'angular': 'libs/angular-1.3.9',
        'angularRoute': 'libs/angular-route-1.3.9',
        'bootstrap': 'libs/modernizr-2.6.2-respond-1.1.0.min',
        'jquery': 'libs/jquery-1.11.0.min',
        'bootstrapJS': 'libs/bootstrap',
        'jqueryElastislide': 'libs/jquery.elastislide',
        'jqueryPpCustom' : 'libs/jquerypp.custom',
        'modernizrCustom' : 'libs/modernizr.custom.17475',
        'skrollr' : 'libs/skrollr.min'
    },
    shim: {
        'angular': {
            exports: 'angular'
        },
        'angularRoute': {
            deps: ['angular']
        },
        'jquery': {
            exports: '$'
        },
        'bootstrapJS': {
            deps: ['jquery']
        },
        'jqueryElastislide':{
            deps: ['jquery']
        },
        'jqueryPpCustom':{
            deps: ['jquery']
        },
        'skrollr': {
            exports: 'skrollr'
        }
    }
});

define('controllersFactory', ['angular'], function(angular) {
    return angular.module('app.controllers', []);
});

define('servicesFactory', ['angular'], function(angular) {
    return angular.module('app.services', []);
});

define('directivesFactory', ['angular'], function(angular) {
    return angular.module('app.directives', []);
}); 

define('app', [
    'angular',
    'angularRoute',
    'servicesFactory',
    'controllersFactory',
    'directivesFactory',
    ],
    function(angular) {
        return angular.module('app', ['app.services', 'app.controllers', 'app.directives', 'ngRoute']);
    }
);

require(['app', 
    'jquery',
    'skrollr',
    'bootstrap', 
    'bootstrapJS',
    'jqueryElastislide',
    'jqueryPpCustom',
    'modernizrCustom'], 
    function(app, 
        jquery, 
        skrollr,
        bootstrap, 
        bootstrapJS, 
        jqueryElastislide, 
        jqueryPpCustom, 
        modernizrCustom) {
    require([
            'controllers/mainController'
        ],
        function() {
            app.config(['$routeProvider', function($routeProvider) {
                $routeProvider.
                    when('/', {templateUrl: 'templates/main.html', controller: "MainController"}).
                    otherwise({redirectTo: '/'});
            }]);

            angular.bootstrap(document, ['app']);
        }
    );
});
})();

从web检查器,我看到skrollr.min.js在directives.js文件之前加载,所以我相信这些指令应该能够调用skrollr中的函数。

非常感谢任何建议 - 谢谢!

1 个答案:

答案 0 :(得分:1)

define(['directivesFactory', 'skrollr'], function(directivesFactory){

directivesFactory.directive('skrollr', [function(){  
    var directiveDefinitionObject = {
        link: function() {
            skrollr.init();
        }
    };

    return directiveDefinitionObject;
}]);
});

您似乎没有在此处需要skrollr,您需要添加要求。