Boa noite.
Estou começando a estudar um pouco sobre angular, e estou com a seguinte duvida:
Criei uma diretiva(componente) de cadastro de telefones, essa diretiva adiciona varios telefones a uma tabela(através de um array de objetos), criei um controller telefone que controla essa diretiva.
Meu problema é o seguinte, quero utilizar esta diretiva em cadastros, por exemplo de clientes, fornecedores e etc… para isso eu crio a tela com os outros campos, por exemplo no cadastro de usuário crio o nome, data de nascimento e etc… e coloco a diretiva para controlar os telefones.
Minha duvida é como eu compartilho o controller do meu cadastro de usuário e o controller da diretiva de telefones? ambos estão na mesma aplicação.
Obrigado.
         
        
          
        
           
           
           
         
         
            
            
          
       
      
        
        
          
Boa tarde amigo, isso é tranquilo de se fazer, abaixo segue um link que poderá lhe ajudar, acho que é o que você procura.
Comunicação entre diretivas e controladores
         
        
        
           
           
           1 curtida
         
         
            
            
          
       
      
        
        
          Recomendo que vc crie uma factory para utilizar com sua diretiva. Faça a controller da diretiva chamar os métodos dessa factory, ou seja, o array de telefones ficará na factory.
Uma vez criada essa factory, a mesma pode ser injetada em qualquer outro controller (por exemplo, das suas telas de cadastro) e você poderá manipular o estado da diretiva e obter os dados também.
Importante lembrar que essa factory deverá retornar uma function em vez de um json, assim:
angular.module('moduloDiretiva', []).factory('FactoryTelefones', function() {
    return function() {
        this.getAllTelefones = function() {
            return ...;
        }
    }
});
Nas controllers de cadastro, você irá injetar essa factory e instanciar a mesma para poder setar na diretiva:
.controller('CadastroCtrl', ['$scope', 'FactoryTelefones', function($scope, FactoryTelefones) {
    $scope.factoryTelefones = new FactoryTelefones();
}]);
Na tela:
<div ng-controller="CadastroCtrl">
    <!-- sua diretiva de telefones -->
    <div telefones factory="factoryTelefones">
    </div>
</div>
Na diretiva você terá que definir uma variável no escopo para receber a instância da factory criada no controller de cadastro para que a controller da diretiva utilize nas ações.
Já usei assim e ficou muito bom para a necessidade que tive. Qualquer dúvida, só chamar.
         
        
        
           
           
           1 curtida