我在一个网站上工作,在意识到需要一些动态框架之前就开始构建它。在学习了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
。
我决定$window
在isPage
函数内部使用该服务,但这也不起作用。只有当我调用一个测试$ 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不是适合我的框架吗?
编辑:
一些事情要清除:
我是AngularJS的新手,因此,如果您可以解释您的答案,那将是很好的。
我这样做而不是重定向到另一个页面的全部原因不是要关闭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] 删除。
我来说两句