我有一个 Angular 应用程序需要连接到服务器并在我们检索数据之前从他们那里授权
问题是 {{}}
范围不显示从服务器检索的更新数据。
我有类似的东西
.controller('Ctrl', function($scope, $rootScope) {
'use strict';
$scope.signIn = function() {
// Authenticate (takes a bout 2 second to get the data back
server1.authenticate(uame, pd, function(data){
//parse data
$scope.data = data
}
$scope.$broadcast('sData', $scope);
}
})
.controller('mCtrl', function($scope, $rootScope) {
'use strict';
$scope.test='old test';
$scope.$on('sData', function(event, nData){
$scope.test=nData.test //show 'new test' as a string
})
})
html
<div ng-click='signIn'>click me</div>
{{test}} //shows 'old test' when first load. but not showing 'new test' after user click the div.
谁能帮我解决这个问题?非常感谢!
最佳答案
这来自文档:http://docs.angularjs.org/api/ng/type/ $rootScope.作用域
这可能是因为摘要已经发生了。我要么使用:
$scope.$apply()
//or better
//use the scope returned in the listener
$scope.$on('sData', function(event, nData){
event.currentScope.test = nData.test //show 'new test' as a string
})
$on(姓名, 听众); 监听给定类型的事件。有关事件生命周期的讨论,请参阅 $emit。
事件监听函数格式为:function(event, args...)。传入监听器的事件对象具有以下属性:
targetScope - {Scope}:事件被 $emit-ed 或 $broadcast-ed 的范围。
currentScope - {Scope}:处理事件的当前作用域。
name - {string}:事件名称。
stopPropagation - {function=}:调用 stopPropagation 函数将取消进一步的事件 传播(仅适用于 $emit-ed 的事件)。 preventDefault - {function}:调用 preventDefault 将 defaultPrevented 标志设置为 true。
defaultPrevented - {boolean}:如果调用了 preventDefault,则为真。
关于javascript - 就我而言,如何在运行时填充数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22724324/