Javascript 动态$scope DOM元素未准备好进行插件初始化

Javascript 动态$scope DOM元素未准备好进行插件初始化,javascript,angularjs,dom,Javascript,Angularjs,Dom,对于AngularJS来说,这是一个全新的世界,除了我挑选的一些教程和演示之外,这是我第一次尝试深入构建一些东西。因此,如果我没有正确解释可能是一个简单的问题,请道歉 我有一个控制器,看起来像: myApp.controller('ShowCtrl', function($scope, $routeParams, $http) { $http({ method: 'GET', url: 'rest/details/'+ $routeParams.identifier

对于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响应,将其分配给作用域,并在其中循环以显示partial.html中的项

<li ng-repeat="(key, show) in shows" class="required-element">
  {{ show.title }}
</li>
  • {{show.title}
  • 这很有效。作用域具有响应,我可以按预期循环和显示元素

    问题在于,我还使用了一个插件,它似乎在元素写入DOM之前就已经初始化了

    您可以在上面的代码中看到插件的.init();仅在将api响应分配给控制器$scope之后调用。因此,插件中的任何功能都不会绑定到这些元素

    有没有办法推迟我的初始化();直到我可以确定DOM元素已经写入页面的时候?我已经做了一系列的搜索来寻找一个解决方案,它看起来可能是一个角度指令可能是一个解决方案

    非常感谢您的帮助

    [更新]-好的,到目前为止,我已经找到了两种解决方案(其中一种是facepalm)。但这两种方式都不是最好的。失败了几次

    -简单的方法。通过jQuery document.ready()初始化插件;-这是有原因的,让我觉得自己花了这么长时间才尝试。(nvm,没有工作)


    -通过将我的$http GET请求移动到一个带有返回承诺的角度“工厂”。我会加载一个作用域,然后加载另一个插件。似乎有些过火,但这是一种学习体验。

    您需要向控制器注入
    $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()仅在摘要循环结束并呈现视图后才起作用。

    砰!我相信这正是我想要的。我之前的评论也是错误的,那就是document.ready();实际上不起作用。@Just2Jays-只是确保-我的答案仍然有效,对吗?当然有效!再次感谢!