对于AngularJS的世界来说是一个新手,并且除了我已经选择的一些教程和演示之外,这是我第一次尝试深入构建一些东西。如果我没有正确解释可能是一个简单的问题,那么我很抱歉!
我有一个看起来像的控制器:
myApp.controller('ShowCtrl', function($scope, $routeParams, $http) {
$http({
method: 'GET',
url: 'rest/details/'+ $routeParams.identifier
}).then(function successCallback(response) {
$scope.shows = response.data;
myPlugin.init();
}, function errorCallback(response) {
$scope.shows = "something bad happened";
});
});
这会向自定义REST接口发出GET请求,该接口会调用外部/第三方API。然后我接受api响应,将其分配给范围,并循环显示它以显示我的部分.html中的项目
<li ng-repeat="(key, show) in shows" class="required-element">
{{ show.title }}
</li>
这很有效。范围有响应,我可以按预期循环和显示元素。
出现问题因为我还使用了一个插件,它似乎在元素写入DOM之前初始化了。
你可以在上面的代码中看到插件的.init();在将api响应分配给控制器$ scope之后调用。因此,插件中没有任何功能绑定到这些元素。
有没有办法推迟我的init();到我可以确定DOM元素已写入页面的时候?我已经做了一堆搜索解决方案,似乎一个有角度的指令可能是一个解决方案吗?
非常感谢任何帮助!
[更新] - 好的,到目前为止,我已经找到了几个解决方案(其中一个解决方案让我面对面)。似乎不是最好的&#34;虽然如此。失败了几次
- 简单的方法。通过jQuery document.ready()初始化插件; - 这有些原因让我感到愚蠢,因为我花了多长时间才尝试。(nvm,没有工作)
- 将我的$ http GET请求移动到角度&#34;工厂&#34;承诺返回。我会用一个加载范围,然后用另一个加载我的插件。似乎有点矫枉过正,但很有学习经验。
答案 0 :(得分:2)
您需要将$timeout
注入您的控制器并使用它:
myApp.controller('ShowCtrl', function($scope, $routeParams, $http, $timeout) {
$http({
method: 'GET',
url: 'rest/details/'+ $routeParams.identifier
}).then(function successCallback(response) {
$scope.shows = response.data;
$timeout(function() {
myPlugin.init();
});
}, function errorCallback(response) {
$scope.shows = "something bad happened";
});
});
这样,只有在摘要循环结束并呈现视图后才会调用myPlugin.init();
函数。