AngularJs异步数据绑定

时间:2014-09-11 13:04:47

标签: angularjs

我对AngularJs很新,我有一个简单的问题。我想把这个名字。但是这个名字最初只有一个值,但在0.3-0.5秒之后它还有其他价值。我不知道如何绑定它,价值可能会改变。

HTML code:

<div ng-controller="FormController">
    <h2 >
        {{getName()}}<br>
        <span class="icon-f-gear"></span>
        <small>Procesas</small>
    </h2>
</div>

角度控制器:

var App = angular.module('form', ['ui.bootstrap']);

App.controller('FormController', ['$scope' ,'$http', function($scope, $http) {

    $scope.tasks = [];
    $scope.socket.stomp.subscribe("/app/tasks", function (message) {
        if ($scope.tasks.length !=0){
            $scope.tasks.removeAll();
        }
        JSON.parse(message.body).forEach(function (el) {
            $scope.tasks.push(el);
        });
    });
    $scope.getName = function(){
        return $scope.tasks[0].form.name;
    };

我使用Stomp协议,它不会立即给我数据,因为它必须向服务器发送请求并将其取回,这需要时间。我尝试在请求变量$ scope.tasks [0] .form.name从undefined更改为&#34; Institution&#34;之后进行调试,但是在屏幕未定义的保留中,如何绑定变量以在dinamically中更改值。提前感谢您的帮助!

更新 问题解决了,我只需要使用$ scope.apply(...)函数。代码在这里:

var App = angular.module('form', ['ui.bootstrap']);

App.controller('FormController', ['$scope' ,'$http', function($scope, $http) {

    $scope.tasks = [];
    $scope.socket.stomp.subscribe("/app/tasks", function (message) {
        if ($scope.tasks.length !=0){
            $scope.tasks.removeAll();
        }
        JSON.parse(message.body).forEach(function (el) {
            $scope.tasks.push(el);
        });
        $scope.apply(function(){$scope.tasks});
    });
    $scope.getName = function(){
        return $scope.tasks[0].form.name;
    };

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

很可能订阅回调没有在角度上下文中调用。尝试将回调代码包装在$scope.$apply中,看看它是否有效

 $scope.socket.stomp.subscribe("/app/tasks", function (message) {
     $scope.$apply(function() {
        if ($scope.tasks.length !=0){
            $scope.tasks.removeAll();
        }
        JSON.parse(message.body).forEach(function (el) {
            $scope.tasks.push(el);
        });
     });
    });

答案 1 :(得分:0)

我相信你调用的方法返回undefined,因为它没有数据。 换句话说:给它一个初始值,它应该工作

我会把它重写为:

<div ng-controller="FormController">
    <h2>
        {{formName}}<br>
        <span class="icon-f-gear"></span>
        <small>Procesas</small>
    </h2>
</div>

并且

App.controller('FormController', ['$scope' ,'$http', function($scope, $http) { 

$scope.formName = '';
--- rest of code

或者,如果您希望以当前方式保留它:     App.controller('FormController',['$ scope','$ http',函数($ scope,$ http){

$scope.tasks = [];
$scope.tasks[0].form.name = '';

$scope.getName = function(){
    return ($scope.tasks.length > 0) ? $scope.tasks[0].form.name : '';
};

我希望这会有所帮助