Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 闭包编译器从外部警告未定义的属性_Javascript_Google Closure Compiler_Angular Translate - Fatal编程技术网

Javascript 闭包编译器从外部警告未定义的属性

Javascript 闭包编译器从外部警告未定义的属性,javascript,google-closure-compiler,angular-translate,Javascript,Google Closure Compiler,Angular Translate,闭包编译器会发出关于未在外部上定义的属性的警告,而据我所知,该属性是在该外部上定义的 我想让闭包编译器干净地编译它,而不发出警告 我正在为编译器使用以下选项: 角球传球 编译级别=高级优化 创建源映射 语言\u in=ECMAScript 5\u严格 管理\u关闭\u依赖项 警告级别=详细 产生的警告是: trFilter.js:19: WARNING - Property instant never defined on pascalprecht.translate.$translate

闭包编译器会发出关于未在外部上定义的属性的警告,而据我所知,该属性是在该外部上定义的

我想让闭包编译器干净地编译它,而不发出警告

我正在为编译器使用以下选项:

  • 角球传球
  • 编译级别=高级优化
  • 创建源映射
  • 语言\u in=ECMAScript 5\u严格
  • 管理\u关闭\u依赖项
  • 警告级别=详细
产生的警告是:

trFilter.js:19: WARNING - Property instant never defined on pascalprecht.translate.$translate
            target = $translate.instant(texts.toString());
                     ^
产生警告的文件包含以下内容:

var myApp = {};

/*
 * The trFilter generates translated strings.
 */
(function () {
  'use strict';

  /**
   * @param {pascalprecht.translate.$translate} $translate
   * @returns {function((Array.<string>|string)): string}
   */
  var trFilter = function ($translate) {
    return function(texts) {
      var target;
      target = $translate.instant(texts.toString());
      return target;
    };
  };

  myApp.trFilter = ['$translate', trFilter];
})();

angular.module('myApp')
    .filter('tr', myApp.trFilter);
我认为外部文件中不需要goog.provide()和goog.exportProperty()调用。我在文件中测试了有和没有它们,但它们似乎没有任何区别

我正在使用grunt闭包编译器grunt助手运行闭包


更改为warning_level=QUIET确实消除了警告,但也消除了有关可能出现问题的警告。例如,如果我将呼叫更改为:

target = $translate.instatn(texts.toString(());
我想得到一个警告,因为$translate对象上没有instatn()函数

在这种情况下,为了让闭包编译器找到正确的外部函数,我需要做哪些更改?

我尝试以下方法:

/**
 * The $translate service
 * @type {Object}
 * @constructor
 */
pascalprecht.translate.$translate;
goog.provide('pascalprecht.translate.$translate');
(放置@type{Object})。和

“警告-未在上定义属性” pascalprecht.translate.$translate”


不显示更多内容。

您使用warning\u level=QUIET进行了测试?warning\u level=QUIET确实消除了警告,但是如果我将函数拼错为instatn warning\u level=QUIET,则不会抱怨。我想保留有关代码有效问题的警告。我现在明白了。在从外部js加载值之前不能定义此属性?这并不完全正确,但我相信这是可行的。据我所知,闭包编译器在处理代码之前从外部加载符号。我确实尝试添加goog.require('pascalprecht.translate.$translate');到服务文件的to,但这会导致编译失败,错误为“error-required”pascalprecht.translate.$translate”命名空间从未提供“我也尝试将角度转换源添加到我输入到闭包编译器的内容中,但该源包含与闭包不兼容的JSDoc标记,这会导致整个编译失败。我还需要将trFilter()的注释更改为“@param{Object}$translate”。令人惊讶的是,当使用错误的函数名时,将两者都更改为对象会使其产生错误。谢谢你的帮助。
/**
 * The $translate service
 * @type {Object}
 * @constructor
 */
pascalprecht.translate.$translate;
goog.provide('pascalprecht.translate.$translate');