Diretivas e Controller do angular

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