Messages do not appear on the screen using Angular

-1

I'm finalizing a messaging app, however, I'm not able to make the messages appear on the screen.

HTML:

<div class="card" ng-repeat="mensagem in mensagens">
  <div class="item item-text-wrap">
    <h2>{{mensagem.usuario}} / {{mensagem.logradouro}}</h2>
    <p>{{mensagem.msg}}</p>
    <p>{{mensagem.hora}}</p>
  </div>
</div>

controller:

.controller('logradouroCtrl', function ($scope, $http, $window, $stateParams, $ionicScrollDelegate, socket) {

$scope.mensagem = {
    msg:""
  };

var pegaMsgsLogra = function () {

    idCep = $window.localStorage.getItem('idCep');
    idUsuario = $window.localStorage.getItem('idUsuario');
    var nome = $window.localStorage.getItem('nome');
    var usuario = $window.localStorage.getItem('usuario');
    var uf = $window.localStorage.getItem('uf');
    var cidade = $window.localStorage.getItem('cidade');
    var bairro = $window.localStorage.getItem('bairro');
    var logradouro = $window.localStorage.getItem('logradouro');


    socket.message(function(res){
        console.log(res);
        $scope.mensagens.push(res);
    })

        $ionicScrollDelegate.resize();
        $ionicScrollDelegate.scrollBottom(true);
}

services.js:

.factory('socket', function ($rootScope) {
    var wsUri = "ws://localhost:1234";//ocalhost:1234
    var socket = new WebSocket(wsUri);
    return {
        send: function (data) {
            socket.send(JSON.stringify(data));
        },
        message: function(callback){
            socket.onmessage = function(ev) {
                var result = JSON.parse(ev.data); //PHP sends Json data
                console.log(result);
                callback(result);
                //ev.data são os dados da mensagem que irão aparece na tela
                $rootScope.$apply(function () {
                    **$rootScope.mensagens.push(result);**
                });

            };
        }
    };
});

app.js:

.factory('socket', function ($rootScope) {
    var wsUri = "ws://localhost:1234";
    var socket = new WebSocket(wsUri);
    return {
        send: function (data, callback) {
            socket.send(JSON.stringify(data));
            var args = arguments;
        },
        message: function(){
            socket.onmessage = function(ev) {
                var result = JSON.parse(ev.data); //PHP sends Json data
                $rootScope.$apply(function () {
                    $rootScope.mensagens.push(result);

                });

            };
        }
    };
});

Messages appear like this on the screen:

  

Can not read property 'push' of undefined

and points to this controller line: $ scope.mensagens.push (res);

    
asked by anonymous 18.07.2016 / 19:42

1 answer

0

/jsbin.com/qodajoc/1/edit?html,js,console">JSBIN/qodajoc :

//IMagine que isto é como funciona a estrutura de objetos do angular em nivel $scope ou $rootScope o que diferencia um do outro é o grau de profundidade de e exposição entre os modulos.

var $scope = { 
   mensagem:{
     msg: "legal"
   } 
};

console.log($scope.mensagem.msg);
console.log(typeof($scope.mensagem));
// $scope.mensagem.push("asd");
// isto não é possivel ("TypeError: $scope.mensagem.push is not a function")  pois seu $scope.mensagem é um objeto. Para poder fazer o ajuste devido ele deveria ser uma estrutura de array para efetuar push. 

// Veja agora


var $scope = { 
   mensagem:[
     {
       msg: "legal"
     }
   ]
};

console.log(typeof($scope.mensagem));

$scope.mensagem.push({
 msg: "asd" 
});

console.log($scope.mensagem);

Taking advantage of the hook, if you want to keep using an object instead of array $ scope.message, I would recommend using KEY / iTEM:

$scope.mensagem = {

    0:{
       msg: "lero lero",
       status: "warning"
    },
    41:{
       msg: "lero lero",
       status: "warning"
    }


}

So in case you need to check / update or etc an object just look for the KEY

$scope.mensagem[41].msg = "";
    
19.07.2016 / 00:44