Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Array Multidimensional

Oi,

Estou tentando criar um array multidimensional e enviar do controller para o meu view mas não estou conseguindo

Eu sei que necessito de dois ng-repeats na view mas eu não sei como construo um array multidimensional (matriz)

O que desejo que apareça na view é a seguinte informação:

Categoria/ Data Registo        Fruta        Carne        Snacks
12/10/16                        Papaia        Porco     
13/10/16                                     Bacon     
14/10/16
15/10/16                                                  Batata Frita

Alguem me consegue ajudar?

(A informação está a ser carregada da base de dados de uma tabela que tem somente os produtos registados e eu quero ver num intervalo de datas a aquisição dos produtos)

7 respostas

Sérgio,

Array multidimencional você quer dizer isso?

var arrMulti = [
    ['a', 'b', 'c'],
    ['d', 'e', 'f']
]

Array Multidimencional é array dentro de array.

Abraço.

Sim em que o resultado final iria ser uma tabela em que a primeira coluna era a data e cada coluna era a categoria do produto, que podia existir ou não.

Sérgio

Então o que você precisa é algo mais ou menos assim;

var arrMulti = [
    ['12/10/16', 'Papaia', 'Porco', ''],
    ['13/10/16', '', 'Bacon', ''],
    ['14/10/16', '', '', ''],
    ['15/10/16', '', '', 'Batata Frita']
];

Só o cabeçalho da tabela que deve ser fixo na view.

Abraço.

É isso que eu preciso, mas não estou conseguindo criar um metodo que retorne isso direitinho para a view.

Não entendi exatamente como você está fazendo, se pudesse postar o código ajudaria um pouco. Mas vamos lá, você pode criar uma variável no seu $scope para armazenar o seu array, e depois um método que seta os valores para essa variável.

Por exemplo:

$scope.array = [];

$scope.atualizaArray = function() {
    $scope.array = [
        ['12/10/16', 'Papaia', 'Porco', ''],
        ['13/10/16', '', 'Bacon', ''],
        ['14/10/16', '', '', ''],
        ['15/10/16', '', '', 'Batata Frita']
    ];
}

Na sua view dai faz o ng-repeat normalmente, o angular atualiza a view conforme o valor das variáveis muda.

Das vezes em que usei o AngularJS não vi nenhuma forma de chamar um ng-repeat a partir de um método, só com variáveis mesmo.

Abraço.

Oi,

O meu formulario tem 2 inputs, a data de Inicio e de Fim, após escolher as datas o meu site verifica se no banco tem registos e envia para o meu angular os registos que existem. No banco estou a guardar a categoria do produto e a data, o meu primeiro objetivo é enviar para a view com produtos à mao (no exemplo coloquei Produto 1), mas depois vou carregar da base de dados. O problema é que as datas que não têm registo tem que aparecer na tabela, criei um metodo que recebe a data iniciail e final que retorna um array com todas as datas seguidas (este metodo está a funcionar, se for necessario coloco aqui).

O código que tenho é

$scope.carregarDatas = function(){
      var dataInicial = document.getElementById('dataInicioInput');
      var dataFinal   = document.getElementById('dataFimInput');

      var intervaloDatas = getAllDays(new Date(dataInicial.value), new Date(dataFinal.value));
      $scope.listaDatas = intervaloDatas;
            var listaDisponibilidadesMeios=[];

            var arrayTeste = {datas:'',conteudo:[]};
            var arrayDisp=[];
            var nregistos=0;
            var arrayDatas=[], arrayDisponibilidade=[];
            for(var d=0;d<intervaloDatas.length;d++){
              var data=intervaloDatas[d];
              arrayTeste.datas=data;
              for(var categoria=0;categoria<resposta.length;meio++){
                var celula=[];
                RegistosFactory.getRegistoInDate(data,resposta[categoria].id).success(function(resposta){
                  if(resposta !== undefined && resposta!==null && resposta !== ''){
                    arrayTeste.conteudo.push({conteudo:'Produto 1'});
                  }
                  //else{
                  //  arrayTeste.conteudo.push({conteudoCelula:' - '});
                  //}
                }).error(function(){
                    arrayTeste.conteudo.push({conteudoCelula:' - '});
                });
              }
            }
            $scope.listaConteudo = arrayTeste;


        }).error(function(){

            $scope.lista = [];
        });
    }
    else{
        $scope.lista = [];
    }
  }*/

Muito obrigado pela ajuda. abraço

solução!

Já encontrei uma solução que foi um array de objectos com dois atributos, um é a data e o outro um array de produtos.