Javascript 使用角度打印视图中的全局变量
我有一个带有全局变量的应用程序(实际的全局变量,而不是Javascript 使用角度打印视图中的全局变量,javascript,angularjs,Javascript,Angularjs,我有一个带有全局变量的应用程序(实际的全局变量,而不是$rootScope)。我需要使用{{}表达式将其打印到视图中。如何将当前控制器的$scope变量与此全局变量关联,以便始终在屏幕上打印此全局变量的最新值 编辑:代码: app.controller('placesCtrl', ['$scope','$rootScope',function($scope, $rootScope){ $scope.place = place; }]); var autocomplete,map,pla
$rootScope
)。我需要使用{{}
表达式将其打印到视图中。如何将当前控制器的$scope
变量与此全局变量关联,以便始终在屏幕上打印此全局变量的最新值
编辑:代码:
app.controller('placesCtrl', ['$scope','$rootScope',function($scope, $rootScope){
$scope.place = place;
}]);
var autocomplete,map,place = {};
place.name = "asdf";
function initAutocomplete() {
...
//Initialize google maps autocomplete
//Add event listener
autocomplete.addListener('place_changed', function() {
//update place
place = autocomplete.getPlace();
console.log(place);
if (!place.geometry) {
window.alert("No such city found!");
return;
}
});
}
如果
myGlobal
是一个对象,对它的简单引用就足够了:
$rootScope.myGlobal = myGlobal;
现在,如果它是一个原始值,如字符串或数字(或者如果您更改了对象的引用),则可以对其使用闭包:
$rootScope.getMyGlobal = function() { return myGlobal; }
然后在HTML中编写:
<div>{{getMyGlobal()}}</div>
{{getMyGlobal()}
模板应始终绑定到$rootScope
的子作用域,因此您应在子作用域中设置一个函数以从$rootScope
检索数据:
//controller
$scope.getData = function(){
return gloablData;
}
//template
<div>{{getData()}}</div>
//控制器
$scope.getData=function(){
返回数据;
}
//模板
{{getData()}}
它不是$rootScope
的属性,而是一个实际的全局变量,然后只需在getData
中返回全局数据,请注意,在执行新的摘要循环之前,不会调用getMyGlobal(),因此在此之前不会更新表达式。因此,如果全局变量在某个角度过程之外得到更新,它将在下一个角度过程之前不会在屏幕上更新cycle@PatrickEvans好的,谢谢你指出这一点。因此,如果更新变量的代码不在角度生命周期内,例如在某个异步请求中,不要忘记在其周围或之后调用$scope.$apply
。如果他们有权访问$scope
,他们应该真正更新该变量,而不是某个全局变量。我的警告是,如果他们在Angular之外完全更新变量,例如,在中,setTimeout会更改变量,但无法访问$scope.apply()
,因此视图直到某个随机摘要才会更新occurs@floribon这对我不管用。我已经创建了一个函数$scope.city=function(){return place.name;}
,并在控制器中将h1
设置为{{city()}
。我没有错误,也没有输出值。当我记录place的值时,它给出了正确的输出。我同意这个用例很奇怪,当然不推荐使用,但对于一般角度的理解来说,这是一个很好的练习。在您的示例中,确实无法执行任何其他操作(请避免提及$setInterval
)。