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

Inicializar a funcao pelo controller ou pela diretiva?

Pessoal, estou com uma duvida com relacao ao Angular. Qual a melhor forma de inicializar uma funcao? Pelo controller ou pela diretiva? Qual seria a pratica correta neste caso?

Desculpem se a pergunta for meio boba tipica de iniciante.

3 respostas
solução!

Oi Bruno,

Relaxa que se vc tem dúvida a melhor coisa é perguntar e não deixar batido mesmo!

Sobre onde criar as funções tenho bastante coisa pra falar sobre isso. Vou tentar resumir aqui. Qualquer coisa que eu atropelar por favor pergunte. Bora lá!

Na divisão de resposabilidades do Angular, dá pra dizer que um Controller tem menos responsabilidades que uma Directive. No controller geralmente o que fazemos são coisas totalmente relacionadas a decidir quais informações queremos colocar naquele pedaço da página, para o usuário ver. Decidir o que vamos mostrar para o usuário significa mexer no $scope. Assim, funções que você crie no controller pra chamar num ng-click da vida e que apenas peguem um valor e coloquem no$scope, pra mim são bem OK. Agora, se vc está criando uma função que faz muito mais coisas do que pegar um valor e colocar no $scope, aí diria pra evitar isso. Já que você está acoplando sua lógica de negócio ao controller que cuida de "montar" sua visualização.

A mesma coisa vale pras diretivas no Angular. A única coisa que elas devem fazer a mais do que os controllers é mexer diretamente nas suas tags do HTML já que elas têm acesso ao elemento em que foram adicionadas. Quando digo mexer nas tags, quero dizer colocar Event Listeners e outros tipos de coisa que precisem de acesso ao DOM.

E no fim onde você deve colocar suas outras funções e códigos da lógica de negócio? O Angular recomenda fortemente que você use services para isso, e quando precisar delas as injete como dependências no seu Controller e Diretivas.

Valeu Artur. Excelente explicação: Simples e direta. Me fez lembrar que no curso do Flavio, utilizamos o services para criar funções especificas. Agora faz sentido.

Eu encontrei aqui um exemplo de como isso é aplicado no angular. É praticamente isso que eu estou tentando fazer:

http://stackoverflow.com/questions/22666289/how-to-use-jquery-in-angularjs

Artur, desculpe extender a pergunta. Gostaria de compartilhar a forma como estou fazendo.

O exemplo abaixo funciona, mas eu gostaria de ter certeza de que estou fazendo da maneira correta.

Eu criei o arquivo: services.js

var serviceTest = angular.module('serviceTest', [])

.factory('Testando', function() {
  console.log('Testando servicos');
})

Depois injeto o serviceTest como dependencia na minha app.

Arquivo app.js

var app = angular.module('myApp', ['diretivasDoProjeto', 'ngRoute', 'serviceTest']);

Depois disso eu injeto o serviço no controller:

app.controller('HomeController', function($scope, Testando) {
...
});

Está correto utilizar dessa forma? Por exemplo, se eu quiser utilizar jQuery como este:

$(".js-dotdotdot").dotdotdot({
      ellipsis: '... ',
      wrap: 'word',
      watch: true
  });

Tudo o que eu preciso fazer é criar um service, passar o jQuery para o service e chama-lo no modulo principal da aplicação e no controller?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software