我花了几个小时尝试此代码的细微变化,但我不明白为什么一个有效而另一个无效。
场景如下:我正在尝试提供一个注册用户列表(我通过一个简单的数据库查询来获得它,它只返回几列),然后当一个用户的名字被点击时,我将检索更多关于该用户从数据库中,并在不同的视图中显示它。目前,我正在使用常规<a>
元素执行此操作,其中的ng-click
指令设置了一个名为currentid
. 在我的代码的其他地方,$watch()
每当发生更改时,我都会发送一个新的数据库查询currentid
。那部分似乎正在工作(我看到console.log()
我的手表回调的输出,并且数据库查询正在吐出正确的数据)......但有时会currentid
改变,有时不会,我不知道为什么。
- 一个不起作用的jsfiddle:http: //jsfiddle.net/aLcRL/11/
- 一个 jsfiddle 可以工作的地方:http: //jsfiddle.net/aLcRL/12/
(单击表中的“rmunn”和“admin”链接:下面的“当前 ID”值应该更新。请原谅几乎完全没有 CSS;我是编码人员,而不是图形设计师(“该死,吉姆!”),而且现在我的时区也很晚了,所以我没有动力去美化它。它很实用,它说明了问题,我将把它留在那里。)
这两者之间的唯一区别是一个绑定到currentid
,另一个绑定到vars.currentid
。现在,我明白了为什么绑定到currentid
在父范围和子范围的情况下不起作用(孩子的价值会掩盖父母的价值);因为我来自 Python 背景,所以这对我来说很有意义(这类似于 Python 的实例命名空间如何隐藏类上定义的任何内容的命名空间)。但是在这个 jsfiddle 中,我只使用一个控制器——不是所有这些变量都在同一个范围内吗?
我整天都在为此苦苦挣扎,而我尝试阅读的几个 Stack Overflow 答案(例如,数据绑定在 AngularJS 中如何工作?)让我更加困惑:$apply()
还有$digest()
作用域,哦我的!因此,如果有人能给我一份关于 Angular 范围的简单入门指南(或者指出我已经写过但我错过的指南),我将不胜感激。
“我学过 Clojure 和 Haskell,我可以学习一个简单的 Javascript 框架,”我想。“这很容易。” 男孩,我错了吗。:-)