这是一个吸虫 - http://plnkr.co/edit/PaG1k5N37BTOflObnN7K?p=preview
情景1 :
步骤1 - 在tags
输入框中输入“m”时,Marie
显示为建议。
步骤2 - 输入“j”时,John
显示为建议。
步骤3 - 再次输入“m”时,没有建议。我已在script.js
中实现了此功能。这非常有效,因为Marie
已从$scope.to
移除,因为它已在步骤1中添加到tags
输入框中。
情景2 :
第1步 - 当在tags
输入框中输入“m”时,Marie
会显示为建议。
第2步 - 再次输入“m”时,Marie
仍会显示为建议。
因此,在John
输入框中输入Ghita
或tags
之前,Marie
会一直显示为建议。输入John
后(例如上述方案)Marie
不再显示为建议。
有没有人知道造成这种行为的原因?
我尝试使用$scope.$apply()
,但它给出了一个错误,表示$digest
周期已在进行中。那么,当$scope.$digest()
已经执行时,为什么$scope.to
变量没有得到更新?
答案 0 :(得分:1)
我认为问题是angular-tags库本身: https://github.com/boneskull/angular-tags/issues/28
对于角度大于1.2.0-rc.2的版本,似乎没有更新
答案 1 :(得分:1)
您遇到了Typeahead库的问题。您需要在$timeout
调用中包含标记添加的回调。
$scope.$on("decipher.tags.added", function(info, obj) {
$timeout(function(){
tagAdded(info, obj);
});
});
将解决问题。您可以看到angular-tags指令本身在过滤内部标记列表时执行此操作:
https://github.com/boneskull/angular-tags/blob/master/src/tags.js#L69
编辑: 这是原始的Plunker的working fork。
答案 2 :(得分:0)
正如其他用户所说,似乎这是您正在使用的当前版本标签的错误。临时解决方法是使用$compile
更新tagAdded
中的代码。要使用它,请在$compile
和emailViewController
中添加$scope
作为参数,并将其作为依赖项与$scope
一起注入底部。之后,您可以致电
$compile(document.getElementsByTagName("tags")[0])($scope);
更新它。这样做的副作用是每次添加标记时输入区域都会失去焦点,这可能会也可能不会对应用程序的可用性产生很大影响。
有关使用$compile
答案 3 :(得分:0)
您可以尝试使用$ timeout
$timeout(function(){//your code});在角度$ timeout中强制您的摘要更新您的变量,并且它不会抛出正在进行的摘要错误。
答案 4 :(得分:-1)
试试这个:
if(!$scope.$$phase) {
$scope.$digest();
}
$ scope。$$ phase是一个设置为true的标志,而angular是在$ digest循环中