J'ai une liste d'images dans mon contrôleur, quand je charge la page/contrôleur, j'appelle une méthode pour peupler cette liste, et que, le résultat d'une liste est affiché sur interface ui à travers le modèle de la directive, quand je rafraîchis la liste dans le contrôleur, par une réponse $ http resquest (la même méthode qui fonctionne sur le premier chargement) l'ui ne reflète pas les changements de liste dans le contrôleur.Je fais des recherches sur le web, et le plus instructions cherchées est référez $ scope. $ apply, o essayez pour l'utiliser sur la liste atribuition, mais obtenez une erreur, digest est déjà sur la progression.Si je clique sur le bouton de rafraîchissement du navigateur, fonctionne bien.Mais quelqu'un dit que c'est pas une bonne pratique, utilisez $ scoep. $ apply, mais je n'imagine pas ce qui ne va pas avec le code. J'essaie d'utiliser $ timeout pour, mais ne fonctionne pas.L'interface utilisateur ne se met pas à jour quand la liste est changée sur le contrôleur angulaire
$ scope.listaImagens = resp.data;
angular.module('appImages').controller('HomeCtrl', function($scope, $location, $state, $notification, FileUploader, UrlService, $http, blockUI, ContextoService) {
//List of images
$scope.listaImagens = [];
$scope.findAllImagens = function() {
var urlImagensPagUsuario = $scope.urlImagem + "/findAllPaginadoByUsuario/" +
paginacaoDTO.pagRecordIndex + "/" + paginacaoDTO.pagBatchRecords + "/" + idUsuarioLocal;
$http.get(urlImagensPagUsuario).then(function(resp) {
//HERE, receive the values, but not reflect on UI
$scope.listaImagens = resp.data;
}, function(err) {
console.log(err);
});
}
//Busca as imagens
$scope.findAllImagens();
//Salva o usuario de contexto selecionado
$scope.devePersistirUsuarioContexto = function(newUsuario) {
if (newUsuario && newUsuario.idUsuario) {
$scope.urlUsuarioSelecionado = UrlService.makeUrl('usuarioselecionado');
var usuarioNew = {
"idUsuarioFk": newUsuario.idUsuario
};
$http.put($scope.urlUsuarioSelecionado, usuarioNew)
.then(function(resp) {
console.log('usuario de contexto atualizado');
$scope.findAllImagens();
}, function(err) {
console.log(err);
});
}
}
}
i essayer cet exemple:
$timeout(function() {
$scope.listaImagens = resp.data;
}, 0);
$timeout(function() {
$scope.listaImagens = resp.data;
$scope.$digest()
}, 0);
$timeout(function() {
$scope.$apply(function(){
$scope.listaImagens = resp.data;
}
}, 0);
scope.$parent.$watch('selecionado', function() {
if (scope.changeItemDrop) {
scope.changeItemDrop(scope.selecionado);
}
}, true);
scope.$watch('selecionado', function() {
if (scope.changeItemDrop) {
scope.changeItemDrop(scope.selecionado);
}
}, true);
déclaration diretive
<div class="floating-menu-paciente">
<drop-down-combo placeholder="Escolha o paciente..." url="paciente" selecionado="pacienteContexto" fieldtext="pacienteNome" id="pacienteContexto" change-item-drop="devePersistirPacienteContexto(pacienteContexto)" />
</div>
diretive
angular.module('appTmw').directive('dropDownCombo', ['UrlService', '$http', function(UrlService, $http, $timeout) {
return {
restrict: 'E', //Diretiva restrita ao elemento
scope: {
placeholder: "@",
url: "@",
selecionado: "=",
fieldtext: "@",
changeItemDrop: "&"
},
templateUrl: '/assets/templates/dropDownCombo.html',
link: function(scope, elm, attrs) {
//Quando clica no item para escolha
scope.selectItem = function(resultado) {
scope.selecionado = resultado;
scope.showDrop = false;
};
scope.$watch('selecionado', function() {
if (scope.changeItemDrop) {
scope.changeItemDrop(scope.selecionado);
}
});
}
};
modèle
de la directive
<div>
<div class="combo">
<input type="text" value={{selecionado[fieldtext].trim()}} placeholder="{{placeholder}}" ng-click="show()" ng-focus="true"> </input>
<button type="button" class="btn btn-default srcCombo" ng-click="show()">
<span class="glyphicon glyphicon-search" aria-hidden="true"></span>
</button>
</div>
<!-- "showDrop" variável booleana da diretiva -->
<div class="listagemCombo" ng-show="showDrop" ng-mouseleave="perdeuFoco()">
<table>
<tr ng-repeat="resultado in resultados" ng-click="selectItem(resultado)">
<td> {{resultado[fieldtext]}} </td>
</tr>
</table>
</div>
</div>
pas les œuvres, je découvre une chose, la méthode ** devePersistirUsuarioContexto ** est appelé à partir d'un champ d'application. Regarder $ dans une directive, toute modification si vient de cette montre $ ne reflètent pas nécessairement l'assurance-chômage, je mets un bouton et appelez une méthode à partir du bouton, et les informations reflètent sur ui. –
vous devez ajouter la partie $ watch au code dans la question, sinon il est difficile de dire ce qui pourrait arriver. – ruedamanuel
oui, je modifie la question avec les codes –