2016-04-24 120 views
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

你得到任何錯誤? – Thalaivar

+0

嗨,我沒有得到任何錯誤 - 只是空的字符串。 – Robert

回答

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

感謝Thalaivar。我修改了你提供的代碼並且工作。請看下圖:

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) { 
相關問題