首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义ZeroClipboard和RequireJS - ZeroClipboard。

未定义ZeroClipboard和RequireJS - ZeroClipboard。
EN

Stack Overflow用户
提问于 2014-08-18 08:14:07
回答 3查看 2.4K关注 0票数 2

我试图在AngularJS/RequireJS应用程序中使用ZeroClipboard。

我把ZeroClipboard.js放到了/assets/js/vendors/ZeroClipboard.js的位置

我已经设置了main.js应用程序的RequireJS

main.js

代码语言:javascript
复制
requirejs.config({

    paths: { 
        jQuery: 'vendors/jquery.min',
        'clipboard': 'vendors/ZeroClipboard',
        underscore: 'vendors/underscore-min',
        angular: 'vendors/angular.min',
        'angular-route': 'vendors/angular-route.min',
        'controllers': 'controllers',
        'services': 'services',
        'filters': 'filters',
        'directives': 'directives',
        'app': 'app'

    },

    shim: {
        underscore: {
            exports: '_'
        },
        'jQuery': {
            'exports': 'jQuery'
        },
        'angular': {
            exports: 'angular'
        },
        'states': {
            deps: ['angular'],
            exports: 'states'
        },
        'angular-route': {
            deps: ['angular']
        }
    },
    priority: [
        'angular'
    ]
});

requirejs(['angular',
            'app',
            'underscore',
            'routes',
            'vendors/jquery.min',
            'services/services',
            'directives/directives',
            'filters/filters',
            'controllers/controllers'
           ], function (angular, app, _) {
               angular.element(document).ready(function () {
                   angular.bootstrap(document, ['App']);
                   document.getElementsByTagName('html')[0].dataset.ngApp = 'App';
               });

           });

在我称之为ZeroClipboard的控制器内部

controller.js

代码语言:javascript
复制
define(['clipboard'], function() {
    var AppCtrl = function($scope, $modal, $timeout, $log, $http, $routeParams,  $rootScope) {
        var client = new ZeroClipboard( $("li#copy-buildr") );
    };
    return AppCtrl;
});

我只得到了ReferenceError: ZeroClipboard is not defined

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-18 10:34:19

使用指令并将ZeroClipboard.js直接加载到DOM中是有效的。不确定如何通过AMD加载该文件,因为它总是返回一个错误。

代码语言:javascript
复制
                    .directive('clipCopy', ['$window', function ($window) {
                        return {
                            scope: {
                                clipCopy: '&',
                                clipClick: '&'
                            },
                            restrict: 'A',
                            link: function (scope, element, attrs) {
                                // Create the clip object
                                var clip = new ZeroClipboard( element, {
                                    moviePath: '//cdnjs.cloudflare.com/ajax/libs/zeroclipboard/1.1.7/ZeroClipboard.swf',
                                    trustedDomains: ['*'],
                                    allowScriptAccess: "always"          
                                });

                                clip.on( 'mousedown', function(client) {
                                    client.setText(scope.$eval(scope.clipCopy));
                                    if (angular.isDefined(attrs.clipClick)) {
                                        scope.$apply(scope.clipClick);
                                        console.log($scope.clipClick);
                                    }
                                });
                            }
                        }
                    }]);
票数 0
EN

Stack Overflow用户

发布于 2014-08-18 08:26:47

尝试将您的controller.js更改为

代码语言:javascript
复制
define(['clipboard'], function(ZeroClipboard) {

注意函数参数中的ZeroClipboard。

票数 0
EN

Stack Overflow用户

发布于 2015-05-29 18:04:15

这对我起了作用:

代码语言:javascript
复制
    require(["zeroClipboard"], $.proxy(function (ZeroClipboard) {
        var client = new ZeroClipboard( $('.link-label') );
        client.on( 'ready', function(event) {
            client.on( 'copy', function(event) {
              event.clipboardData.setData('text/plain', $(event.target).prev().html());
            } );
            client.on( 'aftercopy', function(event) {
              console.log('Copied text to clipboard: ' + event.data['text/plain']);
            } );
        } );
        client.on( 'error', function(event) {
            ZeroClipboard.destroy();
        } );
    }, this));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25358897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档