Javascript 动态$scope DOM元素未准备好进行插件初始化
对于AngularJS来说,这是一个全新的世界,除了我挑选的一些教程和演示之外,这是我第一次尝试深入构建一些东西。因此,如果我没有正确解释可能是一个简单的问题,请道歉 我有一个控制器,看起来像: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
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-只是确保-我的答案仍然有效,对吗?当然有效!再次感谢!