在WebStorm中格式化实时模板变量

时间:2015-07-29 12:43:24

标签: webstorm live-templates

我有一个用于创建angular指令的实时模板,我想做的其中一件事就是将指令的控制器声明中的依赖数组复制到控制器函数的参数中。问题是依赖关系数组要求参数是字符串,因此可能看起来像['$scope', '$location', 'etcService', controllerName],其中参数是控制器名称之前的数组中的所有内容。我想要注入这些参数的控制器函数是function controllerName($scope, $location, etcService){}

为了做到这一点,你可以看到我需要删除每个数组元素周围的引号。这可以在实时模板中进行吗?

这是我目前的模板:

(function () {
    'use strict';

    var app = angular.module('$moduleName$');

    app.controller('$controllerName$', [$PARAMS$, $controllerName$]);

    app.directive('$directiveName$', function () {

        return {
            templateUrl: 'app/$templateUrl$',
            transclude: $transclude$,
            restrict: '$restrict$',
            scope: $scope$,
            controller: $controllerName$
        }
    });

    function $controllerName$($PARAMS_noQuotes$){
    $END$
    }
})();

2 个答案:

答案 0 :(得分:0)

不幸的是,使用实时模板是不可能的,因为它没有"替换"允许替换字符的函数(在您的情况下:'什么都没有)来进行所需的转换。

我没有找到要求此类功能的专用票证;仅部分相关的评论here或其他partially related ticket

提交单独的故障单(功能请求)绝对有意义 - 更快地实现特定功能(并且不会丢失)的可能性更大:https://youtrack.jetbrains.com/issues/WEB

答案 1 :(得分:0)

可以使用预定义的函数groovyScript实现此类功能。它只是简要记录:https://www.jetbrains.com/idea/help/live-templates-2.html但它是更复杂的实时模板操作的替代方法。

让我们定义名为'ctrl'的简化实时模板:

app.controller('$controllerName$', [$PARAMS$, $controllerName$]);

function $controllerName$($PARAMS_noQuotes$){
    $END$
}

实时模板的变量可能如下所示(请注意,必须手动将PATH_TO_GROOVY_SCRIPT交换为groovy脚本的完整路径!):

Edit Template Variables dialog

实时模板脚本可以存储为划痕:

Scratches

在这种情况下,“PATH_TO_GROOVY_SCRIPT”将是:

"<YOUR_INTELLIJ_HOME>\\config\\scratches\\Live Templates\\ctrl\\PARAMS_noQuotes.groovy"

实际脚本可以非常简单,例如:

"$_1".replaceAll("'","")

在我看来,即使在这么简单的情况下,最好在变量对话框中使用单独的脚本文件而不是内联脚本表达式。单独的脚本具有这一优势,可以在Groovy控制台中轻松测试...

Ready模板可以这样使用:

Live Template in use