在AngularJS中访问全局javascript变量

托尔普

我在一个网站上工作,在意识到需要一些动态框架之前就开始构建它。在学习了AngularJS之后,我决定在需要的地方(而不是整个站点)使用它。

我在JS中有一个很长的脚本,并且我希望能够从AngularJS指令和控制器中获取和设置变量。

我找到了这个答案,这非常好-我能够从函数中获取变量。但是,当变量在函数外部更改时,AngularJS的变量将不会更新。

我的代码看起来像这样:

JS:

var app = angular.module('someName', []);
var currentPage = 'Menu';

app.controller('PageController', ['$window','$scope', function($window,$scope){

    this.currentPage = $window.currentPage;

    this.isPage = function(page){
        return (page == this.currentPage);
    };
}]);


function button1onClick(){
    currentPage = 'Game';
}

HTML:

<div ng-controller="PageController">
    <div id="Game" ng-show="page.isPage('Game')">
        ...
    </div>
    <div id="Menu" ng-show="page.isPage('Menu')">
        ...
    </div>
</div>

(当我单击页面上的某些按钮时调用了button1onClick)

我的想法是,我想使用一个globle变量在两次潜水之间进行切换。“菜单”页面最初是可见的,但是单击后应该只能看到“游戏” div。

控制器内部的变量没有更新,但仅被赋予的初始值currentPage

我决定$windowisPage函数内部使用该服务,但这也不起作用。只有当我调用一个测试$ window.currentPage变量的函数时,页面才会切换-就像我想要的那样:

JS:

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

var currentPage = 'Menu';

app.controller('PageController', ['$window','$scope', function($window,$scope){

    this.isPage = function(page){
        return (page == $window.currentPage);
    };

    this.button2onClick = function() {
        $window.alert($window.currentPage);
    }
}]);


function button1onClick(){
    currentPage = 'Game';
}

HTML:

<button onclick="button1onClick()">CLICK ME</button> //Button 1
<div ng-controller="PageController">
    <button ng-click="page.button2onClick">CLICK ME</button> //Button 2

    <div id="Game" ng-show="page.isPage('Game')">
        ...
    </div>

    <div id="Menu" ng-show="page.isPage('Menu')">
        ...
    </div>
</div>

因此,我能够更新页面的唯一方法是调用一个测试变量的函数,从而在AngularJS中更新变量。

有没有一种方法可以访问全局变量而无需对其进行测试以更新它?

难道我做错了什么?我不想将整个网站转换为AngularJS样式,我喜欢这样的代码。AngularJS不是适合我的框架吗?

编辑:

一些事情要清除:

  1. 我是AngularJS的新手,因此,如果您可以解释您的答案,那将是很好的。

  2. 我这样做而不是重定向到另一个页面的全部原因不是要关闭socket.io的连接

托尔普

在阅读了malix的答案KKKKKKKK的答案之后,并进行了一些研究,我能够解决我的问题,甚至编写了一个更好看的代码。

按照示例中的要求切换div,我使用ui-router,几乎完全与KKKKKKKK一样。唯一的区别是我以编程方式更改状态-$state.go('menu')

要访问代码其他位置的全局变量,我必须重新构建整个代码以适合AngularJS的结构,并使用Service,与malix的答案类似:

app.factory('Data', function(){
    var Data = {};
        //DEFINE DATA
    Data.stateChange = function(){};
    Data.menuData = {};
    Data.randomColors = ['#35cd96', '#6bcbef', '#E8E1DA', '#91ab01'];
        /RETURN DATA
    return Data;
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在angularjs中访问JavaScript变量

来自分类Dev

AngularJS:在html模板中访问全局变量

来自分类Dev

AngularJS:在html模板中访问全局变量

来自分类Dev

如何在 javascript 库中访问 Twig 全局变量

来自分类Dev

Javascript:匿名函数,访问全局变量

来自分类Dev

在Swift中访问全局变量

来自分类Dev

如何访问模板中的全局变量?

来自分类Dev

从闭包中的全局范围访问变量

来自分类Dev

汇编:访问{{parseJSON}}中的全局变量

来自分类Dev

在本地环境中访问全局变量

来自分类Dev

访问lua中的全局变量

来自分类Dev

无法在__construct中访问PHP“全局”变量

来自分类Dev

汇编:访问{{parseJSON}}中的全局变量

来自分类Dev

Rails中的全局可访问变量

来自分类Dev

从闭包中的全局范围访问变量

来自分类Dev

在marko模板中全局访问变量

来自分类Dev

如何在javascript中访问angularjs范围变量

来自分类Dev

在JavaScript中创建队列并在匿名函数中访问全局变量

来自分类Dev

使AngularJS中的工厂JS变量全局可用

来自分类Dev

在Javascript中访问变量

来自分类Dev

使用require在JavaScript中的匿名函数之外访问全局变量

来自分类Dev

在JavaScript中创建全局变量,控制台无法访问

来自分类Dev

当名称与JavaScript中的参数名称相同时,如何从函数访问全局变量?

来自分类Dev

如何仅在异步代码块完成后访问 JavaScript 中的全局变量

来自分类Dev

“全局”访问变量

来自分类Dev

当可以访问javascript中的全局变量时,将全局变量传递给自调用函数的目的是什么?

来自分类Dev

异步函数中的Javascript全局变量?

来自分类Dev

指向JavaScript中的全局变量的指针

来自分类Dev

全局变量未在JavaScript中更新

Related 相关文章

热门标签

归档