首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在AngularJS指令中访问全局js变量

如何在AngularJS指令中访问全局js变量
EN

Stack Overflow用户
提问于 2013-10-15 22:24:46
回答 3查看 103.5K关注 0票数 52

首先,我检查了一下,我没有发现任何报道我的问题的文章。

如何在angularJS内置指令中访问预定义的js全局变量?

例如,我在<script>var variable1 = true; </script>中定义了这个变量

然后我编写一条AngularJS指令:

<div ng-if="variable1">Show some hidden stuff!</div>

这并不能真正起作用。

然后我被告知我应该使用ng-init

所以我在其他地方写了代码,比如:

<div ng-init = "angularVariable1 = variable1"></div>

这显然是行不通的,因为well...this就像一个恶性循环。您需要访问预定义的js全局变量,然后需要使用ng-init;为了使用ng-init,您需要访问全局变量。

有什么特别的方法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-15 22:43:11

我创建了一个working CodePen example,演示了如何在AngularJS中正确执行此操作。由于直接访问window会使测试变得更加困难,因此Angular $window service应该用于访问任何全局对象。

HTML:

代码语言:javascript
复制
<section ng-app="myapp" ng-controller="MainCtrl">
  Value of global variable read by AngularJS: {{variable1}}
</section>

JavaScript:

代码语言:javascript
复制
// global variable outside angular
var variable1 = true;

var app = angular.module('myapp', []);

app.controller('MainCtrl', ['$scope', '$window', function($scope, $window) {
  $scope.variable1 = $window.variable1;
}]);
票数 97
EN

Stack Overflow用户

发布于 2013-10-15 22:29:50

将全局变量复制到控制器的作用域中的变量。

代码语言:javascript
复制
function MyCtrl($scope) {
   $scope.variable1 = variable1;
}

然后你就可以像你试过的那样访问它。但请注意,当您更改全局变量时,此变量不会更改。如果需要的话,你可以使用一个全局对象来“复制”它。因为它将被引用“复制”,所以它将是相同的对象,因此将应用更改(但请记住,在AngularJS之外执行操作将要求您以某种方式执行$scope.$apply )。

但是,如果你能描述一下你真正想要实现的目标,这可能是值得的。因为使用这样的全局变量几乎从来都不是一个好主意,而且可能有更好的方法来获得您想要的结果。

票数 12
EN

Stack Overflow用户

发布于 2015-08-13 04:10:32

我尝试过这些方法,发现它们不能满足我的需求。在我的例子中,我需要将json渲染的服务器端注入到页面的主模板中,所以当它加载和角度初始化时,数据已经存在,不需要检索(大型数据集)。

我找到的最简单的解决方案是执行以下操作:

在应用程序之外的angular代码中,模块和控制器定义添加了一个全局javascript值-这个定义必须在定义angular内容之前出现。

示例:

代码语言:javascript
复制
'use strict';

//my data variable that I need access to.
var data = null;

angular.module('sample', [])

然后在你的控制器中:

代码语言:javascript
复制
.controller('SampleApp', function ($scope, $location) {

$scope.availableList = [];

$scope.init = function () {
    $scope.availableList = data;
}

最后,您必须初始化所有内容(顺序很重要):

代码语言:javascript
复制
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
  <script src="/path/to/your/angular/js/sample.js"></script>
  <script type="text/javascript">
      data = <?= json_encode($cproducts); ?>
  </script>

最后,初始化你的控制器和初始化函数。

代码语言:javascript
复制
  <div ng-app="samplerrelations" ng-controller="SamplerApp" ng-init="init();">

通过这样做,您现在可以访问您填充到全局变量中的任何数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19383725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档