在我的情况下如何在运行时填充数据?

时间:2014-03-28 22:34:53

标签: javascript angularjs angularjs-scope

我有一个角度应用,需要连接到服务器并在检索数据之前从中进行授权 问题是{{}}范围没有显示从服务器检索的更新数据。

我有类似

的东西
.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.

任何人都可以帮我吗?非常感谢!

1 个答案:

答案 0 :(得分:2)

这来自文档:http://docs.angularjs.org/api/ng/type/ $ rootScope.Scope

这可能是由于已经发生的摘要。我会使用:

$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 - {范围}:事件为$ emit-ed或$ broadcast-ed的范围。

currentScope - {范围}:处理事件的当前范围。

名称 - {string}:活动名称。

stopPropagation - {function =}:调用stopPropagation函数将取消进一步的事件 传播(仅适用于$ emit-ed的事件)。 preventDefault - {function}:调用preventDefault将defaultPrevented标志设置为true。

defaultPrevented - {boolean}:如果调用了preventDefault,则为true。