A controller
função / objeto representa um MVC (Model-View-Controller) da abstração. Embora não haja nada novo para escrever sobre o MVC, ainda é a vantagem mais significativa do angular: divida as preocupações em pedaços menores. E é isso, nada mais, por isso, se você precisa para reagir a Model
mudanças provenientes de View
o Controller
é o direito pessoa para fazer esse trabalho.
A história sobre a link
função é diferente, vem de uma perspectiva diferente da MVC. E é realmente essencial, uma vez que queremos cruzar os limites de um controller/model/view
(modelo) .
Vamos começar com os parâmetros que são passados para a link
função:
function link(scope, element, attrs) {
- scope é um objeto Angular scope.
- O elemento é o elemento embrulhado em jqLite que esta diretiva corresponde.
- attrs é um objeto com os nomes de atributos normalizados e seus valores correspondentes.
Para colocar o link
contexto, devemos mencionar que todas as diretivas estão passando por essas etapas do processo de inicialização: Compilar , Vincular . Um extrato do livro de Brad Green e Shyam Seshadri Angular JS :
Fase de compilação (uma irmã do link, vamos mencionar aqui para obter uma imagem clara):
Nesta fase, o Angular percorre o DOM para identificar todas as diretivas registradas no modelo. Para cada diretiva, ele transforma o DOM com base nas regras da diretiva (modelo, substitui, transclui e assim por diante) e chama a função de compilação, se existir. O resultado é uma função de modelo compilada,
Fase de ligação :
Para tornar a visualização dinâmica, o Angular executa uma função de link para cada diretiva. As funções de link normalmente criam ouvintes no DOM ou no modelo. Esses ouvintes mantêm a visualização e o modelo sincronizados o tempo todo.
Um bom exemplo de como usar o link
pode ser encontrado aqui: Criando diretivas personalizadas . Veja o exemplo: Criando uma diretiva que manipula o DOM , que insere uma "data e hora" na página, atualizada a cada segundo.
Apenas um pequeno trecho dessa fonte rica acima, mostrando a verdadeira manipulação com o DOM. Há uma função conectada ao serviço $ timeout e também é limpa em sua chamada de destruidor para evitar vazamentos de memória
.directive('myCurrentTime', function($timeout, dateFilter) {
function link(scope, element, attrs) {
...
// the not MVC job must be done
function updateTime() {
element.text(dateFilter(new Date(), format)); // here we are manipulating the DOM
}
function scheduleUpdate() {
// save the timeoutId for canceling
timeoutId = $timeout(function() {
updateTime(); // update DOM
scheduleUpdate(); // schedule the next update
}, 1000);
}
element.on('$destroy', function() {
$timeout.cancel(timeoutId);
});
...
$watch
,$digest
e$apply
. "?