Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2015-8-21 Angular Debug 小技巧 #40

Open
hjzheng opened this issue Aug 21, 2015 · 1 comment
Open

2015-8-21 Angular Debug 小技巧 #40

hjzheng opened this issue Aug 21, 2015 · 1 comment

Comments

@hjzheng
Copy link
Owner

hjzheng commented Aug 21, 2015

Angular Debug 小技巧

下面是对文章Tips & Tricks for debugging unfamiliar AngularJS code的摘抄

查看元素的 scope

  • 打开 chrome dev tools(使用F12)。
  • 用 Inspect 工具,在页面上选择一个元素。
  • 在控制台内,用 $($0) 取得该元素,如果没有导入 JQuery,则用 angular.element($0)
  • $($0).scope() 返回该元素上的 scope ,可以检查该 scope 中属性。
  • 如果属性继承自父 scope,该属性不会在当前 scope 中显示。
  • 你可以通过 $($0).scope().$parent 查看父 scope , 你也可以通过 $($0).scope().$parent.$parent 依次往上查看。
  • 你可以查看 root scope : $($0).scope().$root
  • 如果你 Inspect 一个指令,可以通过 $($0).isolateScope() 查看它的隔离 scope。
  • 如果你 Inspect 指令中的一个带隔离 scope 的元素,你也可以用 $($0).scope() 方法。

screenshot_072615_115503_am

scope 中的属性来自于哪里

  • 例如你要查找一个属性 foo , 你可以使用 $($0).scope().foo
  • 如果该属性被定义,说明该属性存在。
  • 不存在的话,你继续向上寻找,直到找到为止。
  • 但是这样依然无法确定属性在哪里?因为 scope 之间存在继承关系,子 scope 可以访问 父 scope 中的变量。
  • 你需要通过 $($0).scope().hasOwnProperty('foo') 确定属性 foo 是否在当前 scope。
  • 如果返回 false ,继续向上查找 $($0).parent().scope().hasOwnProperty('foo') 直达找到为止。

screenshot_072615_122143_pm

当前元素属于哪个 controller

  • $($0).closest('[ng-controller]').attr('ng-controller')

screenshot_072615_122619_pm

如何让修改过的属性值生效

  • $($0).scope().isFoo = true 设置 isFoo 属性为 true。
  • $($0).scope().$digest() 迫使 Angular 改变该值。
  • 页面 Dom 会发生相应的变化。

angulardigest

@hjzheng
Copy link
Owner Author

hjzheng commented Aug 21, 2015

其他资料:
Debugging AngularJS

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant