无法读取未定义的属性“$scope”

Cannot read property '$scope' of undefined

本文关键字:scope 属性 读取 未定义      更新时间:2023-09-26

当我在 angular 应用程序中收到 html 内容时,我将其注入到 html 文档中,但随后无法获取。在 plunker 和 javascript 中最小化代码的示例

我有下一个控制器:

class ReadCtrl
  constructor: (@$scope, @$rootScope, @$compile, @$sce, @$window, @webService) ->
    @getData()
  getData: ->
    promise = @webService.getBookText()
    promise.then @success, @error
  success: (response) =>
    @$scope.html = response.data
    @$scope.trustedHtml = @$sce.trustAsHtml(@$scope.html)
    console.log $('.book_contents').first().children()
ReadCtrl.$inject = ["$scope", "$rootScope", "$compile", '$sce', "$window", "webService"]
angular.module("bookReader").controller "ReadCtrl", ReadCtrl

方法成功将 html 保存到变量 trustedHtml,然后绑定到视图:

<div class="br_container">
  <div class="br_source_container" ng-bind-html="trustedHtml">
  </div>
</div>

内容显示,但此console.log $('.book_contents').first().children()元素为零。当我尝试插入类似@$rootScope.$digest()的东西时,错误会抛出:

Error: [$rootScope:inprog] $digest already in progress

这是因为方法=>,该方法编译为:

  __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
  this.success = __bind(this.success, this);

因此,如果我将=>更改为->,则会出现另一个错误:

 TypeError: Cannot read property '$scope' of undefined

success函数的第一行中。所以this success函数中是未定义的,也许是因为它是带着承诺调用的。

另一种具有$('.br_source_container').html(@$compile(@$scope.trustedHtml)(scope))的方法发生相同的错误。

所以,我需要获取插入部分的 DOM html。

所以,问题解决了,timeout尊重查理特弗这是怎么回事