Javascript 如何防止grunt uglify在指令中弄乱angularJS范围值

Javascript 如何防止grunt uglify在指令中弄乱angularJS范围值,javascript,angularjs,gruntjs,grunt-contrib-uglify,Javascript,Angularjs,Gruntjs,Grunt Contrib Uglify,我编写了一个相当简单的指令,可以动态更改页面上的样式表 以下是该指令的一个片段: OfficeSuiteModule.directive('officeButton', ['$q', 'stylesheetInjectorService', function($q, stylesheetInjectorService) { return { restrict: 'E', replace: true, scope: {

我编写了一个相当简单的指令,可以动态更改页面上的样式表

以下是该指令的一个片段:

OfficeSuiteModule.directive('officeButton', ['$q', 'stylesheetInjectorService', function($q, stylesheetInjectorService) {
    return {
        restrict: 'E',
        replace: true,
        scope: {
            isDisabled: '@?',
            label: '@?',
            api: '='
        },
        template: OFFICE_BUTTON_TEMPLATE,

        // Defines the controller for the 'officeButton' directive.
        controller: function($scope) { }
    }
}]);
现在,我正在使用grunt构建我的项目,我正在使用任务grunt contrib uglify来缩小JavaScript文件,但是我在这里面临一个问题

如果查看JavaScript文件的缩小版本,指令签名中的控制器将更改为:controller:functionc{}

因为没有定义c,所以这不起作用。这将引发AngularJS错误。 有没有一个角度的方法来解决这个问题,或者我可以指示grunt contrib uglify任务不要更改这个参数


您还必须对控制器功能进行注释:

controller: ['$scope', function($scope) {
        // your function
}]
因此,您的完整代码变成:

OfficeSuiteModule.directive('officeButton', ['$q', 'stylesheetInjectorService', function($q, stylesheetInjectorService) {
    return {
        restrict: 'E',
        replace: true,
        scope: {
            isDisabled: '@?',
            label: '@?',
            api: '='
        },
        template: OFFICE_BUTTON_TEMPLATE,

        // Defines the controller for the 'officeButton' directive.
        controller: ['$scope', function($scope) {
            // your function
        }]
    }
}]);

您还必须对控制器功能进行注释:

controller: ['$scope', function($scope) {
        // your function
}]
因此,您的完整代码变成:

OfficeSuiteModule.directive('officeButton', ['$q', 'stylesheetInjectorService', function($q, stylesheetInjectorService) {
    return {
        restrict: 'E',
        replace: true,
        scope: {
            isDisabled: '@?',
            label: '@?',
            api: '='
        },
        template: OFFICE_BUTTON_TEMPLATE,

        // Defines the controller for the 'officeButton' directive.
        controller: ['$scope', function($scope) {
            // your function
        }]
    }
}]);

这正是我想要的答案。不知道这么简单。谢谢你。您必须再等待10分钟才能获得积分,因此在接下来的10分钟内无法接受。@我还想补充一点,您可以将其拉到自己的控制器文件中,并封装所有内容,但我不确定这是否只是一个简单的指令,或者它在未来会增长。你可以使用[]min安全数组方法,如果你把它拉到自己的文件中,你可以使用$inject。我建议你使用这个插件。它会自动为文件添加注释。@TheLazyChap我不知道如果指令是,您可以将指令的控制器拉出。你介意给我一个简短的例子吗,因为我将来可能需要它?@Complexity我已经为你创建了一个plunk,看看它是否有意义。我在指令的控制器文件中添加了一些注释。这应该是不言自明的。这正是我想要的答案。不知道这么简单。谢谢你。您必须再等待10分钟才能获得积分,因此在接下来的10分钟内无法接受。@我还想补充一点,您可以将其拉到自己的控制器文件中,并封装所有内容,但我不确定这是否只是一个简单的指令,或者它在未来会增长。你可以使用[]min安全数组方法,如果你把它拉到自己的文件中,你可以使用$inject。我建议你使用这个插件。它会自动为文件添加注释。@TheLazyChap我不知道如果指令是,您可以将指令的控制器拉出。你介意给我一个简短的例子吗,因为我将来可能需要它?@Complexity我已经为你创建了一个plunk,看看它是否有意义。我在指令的控制器文件中添加了一些注释。这应该是不言自明的。