alcance. $ ver en una directiva no se llama después de la solicitud AJAX
Tengo la siguiente directiva:
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;
}]);
Así es como lo invoco:
<my-filter model="someField" name="abcd" />
Cuando la directiva se inicia por primera vez, lasomeField
esta vacio. Más tarde, se recupera a través de ajax, y su valor se completa.
La pregunta es, ¿cómo puedo vigilar el valor desomeField
¿Para actualizarse? Cuando hago esto desde el método de enlace:
scope.$watch(scope.model, function()
{
console.log( "changed, new val: ", scope.model );
}
Esto solo se llama una vez, cuando se inicia la directiva, y el valor está vacío. Cuando el valor se recupera a través de ajax (desde$http.get
), esta función de reloj no se llama de nuevo. Sin embargo, en otras partes de la página donde estoy mostrando{{someField}}
, ese valor se actualiza cuando se recupera la solicitud ajax. Así que no creo que el problema tenga que ver con hacer.$scope.apply()
despues de la solicitud de ajax.
Editar: someField
Se asigna en el controlador. Aquí está el código:
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);
}
]);
El métodoajax.getUser()
hace un$http.get()
y devuelve supromise
. En el código de arriba, elload
Se llama método que establece el valor desomeField
.