2013-07-12 38 views
1

我有一个简单的函数,将数据加载到{{my_content}}。问题是,我想在{{my_content}}已更新后执行jQuery脚本myJqueryFunction()。下面的代码工作除了myJqueryFunction()似乎之前被调用(或根本没有?){{my_content}}已被更新。有什么建议么?如何在模型数据更新后调用jQuery函数?

$scope.showContent = function(){ 
    $http({ 
     url: "my/url", 
     method: "POST" 
    }) 
    .success(function (data, status, headers, config) { 
     $scope.my_content = data; 
     myJqueryFunction(); 
    }) 
    .error(function (data, status, headers, config) { $scope.status = status; }); 
}; 
+2

没有理由,只要成功处理程序触发,这将无法正常工作。如果你可以让一个Plunkr或JSFiddle来显示这个问题,我会看看,但我看到没有理由,每次成功处理程序触发时都不会调用该函数。 – shaunhusain

+0

我认为它被称为,但它需要在''{{my_content}}''已被更新后调用。我如何确保只有在更新了“{{my_content}}”后才会调用它? –

+0

我在$ scope中找到了一篇很好的文章。$ apply()这个解释比我知道它的工作原理还要多一点:http://jimhoskins.com/2012/12/17/angularjs-and-apply.html但是它真的取决于你期望jQuery函数能够做什么来响应角度变化。例如,如果它正在读取由浏览器计算出的信息,那么该数据可能不会被更新,您可能需要改为使用$ timeout作为建议,这与javascript中的setTimeout一样,但也调用$ scope。$ apply automatically(或者监听关于正在应用的CSS的特定浏览器事件等) – shaunhusain

回答

1

您可以使用$timeout来保证在后续的应用摘要循环中执行此功能。

$timeout(function() { 
    myJqueryFunction(); 
}) 

更新:当然你必须注入$timeout到控制器,加入$timeout到控制器的参数(也许你需要具体说明喷油器阵列中'$timeout'为好,这取决于你所选择的注射方法。)

相关问题