Ho la seguente direttiva:
MyApp.directive('myFilter', ['$filter','$rootScope',
function($filter, $rootScope)
{
var dir = {};
dir.restrict = 'E';
dir.templateUrl = 'views/myFilter.html';
dir.replace = true;
dir.scope =
{
name: '@',
model: '=',
};
dir.link = function(scope,el,attrs)
{
//stuff here
}
return dir;
}]);
Ecco come l'invocarlo:
<my-filter model="someField" name="abcd" />
Quando la direttiva è prima initalized , lo someField
è vuoto. Più tardi, viene recuperato tramite ajax e il suo valore viene compilato.
La domanda è: come è possibile aggiornare il valore di someField
? Quando faccio questo dal metodo link:
scope.$watch(scope.model, function()
{
console.log("changed, new val: ", scope.model);
}
Questo è chiamato solo una volta, quando Inizializzare la direttiva, e quindi il valore è vuoto. Quando il valore viene recuperato tramite ajax (da $http.get
), questa funzione orologio non viene richiamata. Tuttavia, in altre parti della pagina in cui sto visualizzando {{someField}}
, tale valore viene aggiornato quando viene recuperata una richiesta jax. Quindi non penso che il problema abbia a che fare con lo fare $scope.apply()
dopo una richiesta di jax.
Modifica:someField
è assegnato nel controller. Ecco il codice:
MyApp.controller('myCtrl',
['$scope', '$rootScope', '$routeParams',
'ajax', '$filter',
function($scope, $rootScope, $routeParams, ajax, $filter)
{
var userId = parseInt($routeParams.userId);
$scope.loaded = false;
$scope.someField = ""; //initalize with empty value
var load = function(data)
{
$scope.loaded = true;
$scope.someField = data.someField;
};
ajax.getUser(userId).success(load);
}
]);
Il metodo ajax.getUser()
fa un $http.get()
e restituisce la sua promise
. Nel codice sopra, viene chiamato il metodo load
che imposta il valore di someField
.
Mostraci come è definito un campo e come viene assegnato il valore recuperato –
@YeLiu Aggiunta una modifica –