2015-11-19 83 views
2

我在一個Ajax響應函數中設置$scope上的一個值。訪問指令中的範圍屬性,其中通過Ajax設置屬性

$http.post('/aUrl', someData) 
    .then(function(response) { 
     $scope.value = response.data; 
    }); 

這意味着它是undefined直到.then回調運行。

我想在一個自定義指令使用該值,就像這樣:

myModule.directive('myDirective', function() { 
    return { 
     scope: { 
      value: '=' 
     }, 
     link: function(scope, element, attributes) { 
      // do stuff with scope.value... 
     } 
    }; 
}); 

在模板:

<div my-directive value="value"></div> 

但是鏈接功能運行時,該值仍然undefined

處理這個問題的正確方法是什麼?

+0

難道你不能在你的指令中進行ajax調用嗎? – AshBringer

+0

如果我讓一個笨蛋解釋,它會有幫助嗎? – trickpatty

+0

@PatrickLawler這可能是,謝謝:) –

回答

0

您可以更改腕錶的價值:

attributes.$observe('value', function (val) { 
    if (val) { 

    } 
}); 
+0

我會試試這個。順便說一下,爲什麼我在'scope'中放置'value',如果它已經在'attributes'中可用? –

+0

$ observe所調用的'value'代表$ scope.value – chalasr

0

完成這個最安全的辦法是在服務共享數據。我創建了一個蹦極來演示。

myAppModule.factory("pollingService", function ($http, $timeout, $q) { 
    var svc = this; 
    svc.data = { resp: {}, count: 0}; 
    svc.count = 0; 

    svc.poller = function() { 
    svc.count++; 
    return $http.get('data.json').then(function(r) { 
     svc.data.count=svc.count; 
     //console.log(data); 
     $timeout(svc.poller, 4500); 
    }); 
    }; 

    return svc; 

}); 

http://plnkr.co/edit/RVz7ru?p=preview

然而,有許多方法來完成你正在找什麼做的,我強烈建議,當你與角工作按照本指南。它將保持您的代碼清潔,並準備好輕鬆移植到Angular 2。 https://github.com/johnpapa/angular-styleguide

+0

(我在那裏擺脫了那個令人討厭的承諾......從另一個沙箱中借用原始的重擊器......現在應該稍微容易理解) – trickpatty