2015-11-19 84 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