Я создаю настраиваемую директиву, которая наследует область действия родительского контроллера. По большей части я могу получить доступ к объекту «scope» директивы, который я установил в «$ scope» контроллера, за исключением свойств, которые я установил в $ http.get. Независимо от того, пришли ли эти свойства из API или были просто определены буквально, это не имеет значения.
Для меня очень странно, что если я просто зарегистрирую «область видимости» директивы, я могу определенно увидеть свойства, заданные $ http.get, но если я попытаюсь получить к ним доступ напрямую, они не определены.
Я могу получить доступ ко всему в представлении HTML отлично.
var myApp = angular.module('myApp');
myApp.controller('getData', function($scope, $http) {
var myData='myData.json';
$scope.helloFromController = "Hello! This is the controller!";
$scope.getTheData = function() {
$http.get(myData).
success(function(data, status) {
$scope.helloFromHttp = "Hello! This is the http!";
});
};
$scope.getTheData();
});
myApp.directive('useData', function ($parse) {
var directiveObj = {
link: function (scope, element, attrs) {
console.log(scope);
// Returns the scope object that clearly includes the helloFromController and helloFromControllerHttp properties
console.log(scope.helloFromController);
// returns "Hello! This is the controller!"
console.log(scope.helloFromHttp)
// returns undefined
}
};
return directiveObj;
});
Похоже, что есть что-то о том, как работает $ scope с $ http, который я не понимаю. Помощь приветствуется.
Это не о $ scope, это просто факт, что ajax асинхронен. – dfsq