Tenho em minha página .html uma lista suspensa,
Suspenso:
<select ng-model="blisterPackTemplateSelected" data-ng-options="blisterPackTemplate as blisterPackTemplate.name for blisterPackTemplate in blisterPackTemplates">
<option value="">Select Account</option>
</select>
Quero executar uma ação quando o usuário seleciona um valor. Então, no meu controlador eu fiz:
Controlador:
$scope.$watch('blisterPackTemplateSelected', function() {
alert('changed');
console.log($scope.blisterPackTemplateSelected);
});
Mas a alteração do valor na lista suspensa não aciona o código: $scope.$watch('blisterPackTemplateSelected', function()
Como resultado, tentei outro método com um: ng_change = 'changedValue()'
na tag select
e
Função:
$scope.changedValue = function() {
console.log($scope.blisterPackTemplateSelected);
}
Mas o blisterPackTemplateSelected
é armazenado em um escopo filho. Eu li que o pai não pode obter acesso ao escopo filho.
Qual é a maneira correta / melhor de executar algo quando um valor selecionado em uma lista suspensa muda? Se for o método 1, o que estou fazendo de errado com meu código?
fonte
I pode ser tarde para isso, mas eu tinha um pouco o mesmo problema.
Eu precisava passar o id e o nome para o meu modelo, mas todas as soluções ortodoxas me fizeram criar um código no controlador para lidar com a mudança.
Eu consegui sair dele usando um filtro.
O "truque" está aqui:
Estou usando o filtro embutido para recuperar o nome correto para o id
Aqui está um plunkr com uma demonstração de trabalho.
fonte
Por favor, use para esta
ngChange
diretiva. Por exemplo:E passe seu novo valor de modelo no controlador como um parâmetro:
fonte
A melhor prática é criar um objeto (sempre use um. Em ng-model)
Em seu controlador:
e em seu modelo:
Agora você pode apenas assistir
ou você pode usar a diretiva ng-change assim:
O vídeo egghead.io "The Dot" tem uma visão geral realmente boa, assim como esta pergunta de estouro de pilha muito popular: Quais são as nuances da herança prototípica / prototípica do escopo no AngularJS?
fonte
Você pode passar o valor do modelo ng por meio da função ng-change como um parâmetro:
É um pouco difícil saber seu cenário sem vê-lo, mas isso deve funcionar.
fonte
Você pode fazer algo assim
em vez de adicionar a opção, você deve usar data-ng-options. Usei a opção Adicionar para fins de teste
fonte
Estou atrasado aqui, mas resolvi o mesmo tipo de problema desta forma que é simples e fácil.
e a função para mudança de ng é a seguinte;
fonte
Você obterá o valor e o texto da opção selecionada da lista / matriz usando o filtro.
editobj.FlagName = (EmployeeStatus | filtro: {Value: editobj.Flag}) [0] .KeyName
fonte
Eu tive o mesmo problema e encontrei uma solução única. Esta não é a melhor prática, mas pode ser simples / útil para alguém. Basta usar jquery no id ou classe ou em sua tag select e você terá acesso ao texto e ao valor na função de alteração. No meu caso, estou passando valores de opções via sails / ejs:
Então, no meu controlador Angular, minha função de mudança de ng é assim:
fonte
Eu tentei algumas soluções, mas aqui está um trecho de produção básico. Por favor, preste atenção à saída do console durante a garantia de qualidade deste trecho.
Mark Up:
Código:
Explicação: o ponto importante aqui é a verificação de nulo do valor alterado, ou seja, se o valor for 'indefinido' ou 'nulo', devemos lidar com esta situação.
fonte