【问题标题】:Formatting live template variables in WebStorm在 WebStorm 中格式化实时模板变量
【发布时间】:2015-10-20 10:49:27
【问题描述】:

我有一个用于在 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$
    }
})();

【问题讨论】:

  • 不幸的是,使用实时模板是不可能的,因为它没有“替换”功能,可以将' 替换为任何内容(进行所需的转换)。
  • 我没有找到任何需要此类功能的专用票;仅部分相关的 cmets hereanother partially related ticket。提交单独的票绝对是有意义的——更快地实现特定功能的机会更大(不会丢失):youtrack.jetbrains.com/issues/WEB
  • 非常感谢@LazyOne。不幸的是,这是不可能的,它似乎应该是一个标准功能。
  • “标准”在这种情况下非常值得怀疑。例如,我没有任何需要在那里拥有它。根据我设法找到的票证,只有少数人提到“最好拥有”,甚至没有提供他们的用例。但是是的——没有人会反对在那里提供这样的功能。
  • 我不是 Angular 用户 .. 所以不太了解这些函数的使用位置等。所以我的问题是 - 你可以在单个文件中拥有多个像这样的代码块 .. 或每个文件更有可能有一个块?如果单块..那么也许您应该尝试使用文件模板?这并不理想(Velocity 模板引擎).. 但至少你可以在那里使用基本的 Java 字符串操作函数......

标签: webstorm live-templates


【解决方案1】:

使用预定义的函数 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 脚本的完整路径!):

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

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

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

实际的脚本可以很简单,例如:

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

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

现成的模板可以这样使用:

【讨论】:

    【解决方案2】:

    不幸的是,无法使用实时模板,因为它没有“替换”功能,可以替换字符(在您的情况下:' 什么都没有)来进行您想要的转换。


    我没有找到任何需要此类功能的专用票;仅部分相关的 cmets here 或另一个 partially related ticket

    提交单独的票证(功能请求) 绝对有意义——更快实现特定功能(并且不会丢失)的机会更大:https://youtrack.jetbrains.com/issues/WEB

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      • 2017-07-05
      • 2022-01-22
      • 2013-09-24
      • 2019-10-03
      • 1970-01-01
      相关资源
      最近更新 更多