【问题标题】:Angular ng-include src containing global variableAngular ng-include src 包含全局变量
【发布时间】:2014-10-07 08:36:24
【问题描述】:

我有一个全局定义的变量,我需要它在角度表达式中。
我尝试使用$window 服务,但它似乎不起作用:

JS

var INCLUDE_FILENAME = 'includeme.html';

HTML

{{$window.INCLUDE_FILENAME}}
<div data-ng-include="$window.INCLUDE_FILENAME"></div>

以上代码可用作plunkr

我知道我可以使用controller storing data from $window as a scope variable,但这没什么用,因为在这种情况下我可以在没有角度服务的情况下访问它。

【问题讨论】:

  • 我不认为你真的能做到这一点,甚至你不应该这样做。您可以将INCLUDE_FILENAME 添加到范围...
  • 您不能直接访问全局变量作为角度绑定。您可以这样做的一种方法是plnkr.co/edit/2fXu3s?p=preview
  • @ExplosionPills 我同意不应该这样做。不幸的是,如果所需的变量仅在全局范围内可用,则没有太多选择。

标签: angularjs


【解决方案1】:

您不能直接访问全局变量作为视图中角度绑定的一部分,因为它们是根据范围评估的,在您的情况下为 $rootScope。所以基本上你可以在应用程序的run 上的$rootScope 添加一个函数。

例子:-

angular.module('app',[]).run(['$rootScope', '$window', 
     function($rootScope, $window){
       $rootScope.getGlobals = function(variableName){
       return $window[variableName];
     };
}]);

并通过此方法在任何范围内的任何位置访问它,因为任何子范围(隔离范围除外)都是$rootScope 的后代,因此它们将可以使用此方法。

<h1>Loading below...</h1>
{{getGlobals('INCLUDE_FILENAME')}};
<div data-ng-include="getGlobals('INCLUDE_FILENAME')"></div>

Demo

【讨论】:

  • 我不确定 $window 服务的目的是什么 - 它不能在你的代码中被 window 替换吗?
  • @Razor 你可以。它是依赖注入。你不能注入window,但你只能注入$window。它已被添加用于可测试性......但基本思想是你不能在模板中使用全局变量期望角度会评估它......嗯它是right here documented
猜你喜欢
  • 2014-03-18
  • 1970-01-01
  • 2017-09-09
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-16
相关资源
最近更新 更多