Передача данных области из функции в родительскую область?

0

В моем контроллере у меня есть вызов $ 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);

Любая помощь действительно понравилась бы. благодаря

  • 0
    Вы получаете какую-либо ошибку?
  • 0
    Привет, я не получил никакой ошибки - просто пустая строка.
Теги:
angularjs-scope

2 ответа

1

Promises являются асинхронными, поэтому вы не знаете, когда promise вернется, поэтому оно не будет немедленно доступно для вас

  1. У вашей директивы есть метод controller, откуда вы можете запустить вызов $http которому вы можете получить доступ.

  2. Вы можете использовать $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);
});

https://jsfiddle.net/jt6j82by/

0

Спасибо Талаивар. Я изменил код, который вы дали, и он сработал. Смотри ниже:

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) {

Ещё вопросы

Сообщество Overcoder
Наверх
Меню