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

Criação de um módulo - Controller do Angular

Olá,

Estou com uma dúvida referente a criação dos módulos. Não entendi muito bem, pois no primeiro vídeo fala que é necessário criar o módulo e passar dois parâmetros essenciais (caso o módulo ainda não exista): nome e array de dependências (vazio, se não houver nenhuma). Então, alguém poderia me explicar o motivo dessa declaração estar correta? Não ficou muito claro para mim!

angular.module('estoque').controller('Provisao', function($scope) { });

OBS: não existe nenhum módulo ainda.

5 respostas
solução!

Olá Daniel! Tudo bom?

A explicação pra sua dúvida começa assim: algumas linguagens aceitam valores padrão e parâmetros opcionais. O que eu quero dizer com isso?

Em Java, por exemplo, quando você cria um método que recebe dois parâmetros e um deles é opcional (tem um valor padrão), o mais comum é criar uma sobrecarga que passa os valores padrão automaticamente, assim:

void metodo(String param1, String param2opcional) {
  //...
}
void metodo(String param1) {
  metodo(param1, "valor padrão");
  /* vai chamar o método de cima que recebe
     dois parâmetros */
}

Linguagens que aceitam valor padrão nos métodos fazem isso "automaticamente". Como assim? O método module do angular provavelmente tem a seguinte assinatura:

function module (name, dependencies = []) {
  //...
}

Repare que ao declarar o parâmetro dependencies, o método já atribui o valor [] a ele, ou seja, o valor padrão é ser um vetor vazio. Isso faz com que você possa passar esse parâmetro opcionalmente:

angular.module('Estoque', [])
// igual a 
angular.module('Estoque')

Na primeira opção, o Javascript sabe que você enviou um vetor e "sobrescreve" o valor do parâmetro com aquele que você passou. No caso, um vetor vazio. Pra ficar mais claro, vamos criar nosso próprio método:

function imprime(nome, frase = "Bons estudos!") {
  console.log("Olá, " + nome + ". " + frase);
}

Quais você acha que seriam as saídas das duas chamadas a seguir?

imprime("Marco", "Você quer café?");
imprime("Daniel");

A primeira chamada imprime Olá, Marco. Você quer café? enquanto a segunda imprime Olá, Daniel. Bons estudos!.

Isso por que na primeira chamada você está "sobrescrevendo" o valor padrão enquanto na segunda você aceita que o padrão será usado. O angular usa do mesmo artifício pra agilizar o desenvolvimento, permitindo ocultar a passagem do vetor vazio.

Espero ter ajudado!

Ah, quando seu problema estiver resolvido lembre-se de marcar a dúvida como solucionada! Assim outros alunos com a mesma questão encontram a resposta mais rapidamente e podem também seguir com seus estudos =)

Um abraço!

Marco

Opa Daniel, na verdade existe sim, o angular.module já ria o modulo pra você :)

Pegou a ideia?

Muito obrigado pela resposta, Marco!

Entendi o funcionamento, na verdade eu já suspeitava que se tratava de um parâmetro opcional, porém fiquei um pouco confuso, pois na aula é citado como OBRIGATÓRIO passar o parâmetro de dependências para funcionar (mesmo que não haja nenhuma dependência ainda).

Entretanto, já está tudo claro agora =)

Obrigado

Wanderson,

Minha dúvida era em relação ao segundo parâmetro (array de dependências), que na aula é abordado como um parâmetro obrigatório a se passar. Então, imaginei que não seria possível essa declaração, tendo em vista que diz que nenhum módulo foi criado ainda (observação do exercício):

Como está: angular.module('estoque').controller('Provisao', function($scope) { });

Como eu imaginei que deveria ser: angular.module('estoque', []).controller('Provisao', function($scope) { });

Ahh, entendi Daniel, acho que entendi errado enquanto estava respondendo. Ótimo que o Marco já respondeu bem explicadinho.

Bons estudos! Qualquer dúvida estamos por aqui!