Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS:通过指令更新模板绑定_Javascript_Angularjs - Fatal编程技术网

Javascript AngularJS:通过指令更新模板绑定

Javascript AngularJS:通过指令更新模板绑定,javascript,angularjs,Javascript,Angularjs,我修改了工具提示的AngularUI引导目录,以帮助我显示错误消息,以下是我迄今为止所做的: 但我对动态消息有一个问题。第一次将鼠标滑过第一个输入字段时,消息位于错误的位置,这是因为模型尚未正确更新。当然,在第二次鼠标悬停后,工具提示会出现在正确的位置。但是,如果要显示的消息再次更改,则会发生相同的故障 我正在使用$parse更新模板: $parse('tt_content').assign( scope, getErrorMessage( ctrl.$error ) || attrs

我修改了工具提示的AngularUI引导目录,以帮助我显示错误消息,以下是我迄今为止所做的:

但我对动态消息有一个问题。第一次将鼠标滑过第一个输入字段时,消息位于错误的位置,这是因为模型尚未正确更新。当然,在第二次鼠标悬停后,工具提示会出现在正确的位置。但是,如果要显示的消息再次更改,则会发生相同的故障

我正在使用
$parse
更新模板:

$parse('tt_content').assign( scope, 
    getErrorMessage( ctrl.$error ) || attrs.tooltip
);
似乎并非所有的侦听器都已重新接收和更新,“ttHeight”和“ttWidth”仍然设置为“old”值。消息/模型的正确更新仅适用于$observe,如第三个示例所示


我被卡住了,不知道我做错了什么(

问题是,当您使用$apply修改模型时,您需要手动激活摘要循环,以便通知所有观察者此类模型。因此,基本上,您需要添加
范围。$digest();
每当您更改范围时,都要执行
范围。$apply(show);


我在这里用我的建议修改了你的代码

使Angular进入它的状态。“在模型稳定之前,$digest循环一直在迭代。”您也不需要调用
$digest
,这只会导致Angular再次进入其digest循环。您的小提琴似乎无法解决问题。为什么问题没有在中解决?我觉得这很好(假设延迟是所需的行为,请参阅JS第109行)。我相信手动调用$digest,即使在$apply之后,也可以解决这个问题。我在Chrome中尝试过,但第一个输入字段的工具提示最初还是用小提琴显示在错误的位置。如果我将鼠标悬停在字段上,工具提示就出现在错误的位置。如果我再次将鼠标悬停,它就会显示在正确的位置,就像OP的一样fiddle。我没有意识到定位问题。实际上,我不明白定位工具提示所需的行为。我专注于使工作显示/隐藏功能。我更新了fiddle,也许这有助于重新定位工作的原因:我还添加了一些控制台输出来说明问题。消息已更新,但但事实并非如此。