В моем контроллере у меня есть вызов $ http, который возвращает строку json, которую я тогда хочу передать директиве, которая будет добавлена к карте. Строка передается от контроллера к правилу, но не от функции $ http в контроллере к директиве.
wmm.controller('wapMapClr', ['$rootScope', '$scope', '$window', '$http', function ($rootScope, $scope, $window, $http) {
$scope.geobj = {};
$scope.geobj.geoprop = ""
// Search by postcode
// create a blank object to hold our form information
$scope.formData = {};
$scope.pcSearch = function () {
$scope.data = {};
$http.post('api/api.php', { postcode: $scope.formData } )
.success(function (result) {
$scope.geobj = {geoprop : result.json_string};
console.log($scope.geobj.geoprop);
Любая помощь действительно понравилась бы. благодаря
Promises
являются асинхронными, поэтому вы не знаете, когда promise
вернется, поэтому оно не будет немедленно доступно для вас
У вашей директивы есть метод controller
, откуда вы можете запустить вызов $http
которому вы можете получить доступ.
Вы можете использовать $emit/$brodcast
для прослушивания событий, переданных от controller
к вашей директиве.
Я не уверен, какую ошибку вы получите, вот сценарий с использованием $timeout
который работает async
.
var myApp = angular.module('myApp',[]);
myApp.directive('passObject', function() {
return {
restrict: 'E',
scope: { obj: '=' },
template: '<div>Hello, {{obj.prop}}!</div>'
};
});
myApp.controller('MyCtrl', function ($scope, $timeout) {
$scope.obj = { prop: "world" };
$timeout(function(){
$scope.obj = { prop: "from timeout" };
},10000);
});
Спасибо Талаивар. Я изменил код, который вы дали, и он сработал. Смотри ниже:
wmm.controller('wapMapClr', ['$scope', '$window', '$http', function ($scope, $window, $http) {
$scope.geobj = {};
// Search by postcode
// create a blank object to hold our form information
$scope.formData = {};
$scope.pcSearch = function () {
$scope.data = {};
$http.post('api/api.php', { postcode: $scope.formData } )
.success(function (result) {
$scope.geobj = {geoprop : result.json_string};
Тогда в директиве...
wmm.directive('tchOlMap', function () {
var MAP_DOM_ELEMENT_ID = 'tchMap';
return {
restrict: 'E',
//BELOW IS THE LINE I CHANGED TO MAKE IT WORK!
scope: false,
replace: true,
template: '<div id="' + MAP_DOM_ELEMENT_ID + '" class="full-height"></div>',
link: function postLink(scope, element, attrs) {