Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用角度打印视图中的全局变量_Javascript_Angularjs - Fatal编程技术网

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
)。