Angularjs 使用ngModelController的自定义指令不更新UI值

Angularjs 使用ngModelController的自定义指令不更新UI值,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我试图创建一个指令,将十进制值格式化为时间值h:mm。如果用户输入时间值,则应使用十进制表示更新模型。如果用户输入十进制值,则应将其输入替换为格式化值 我使用的指令如下: <input type="text" hour-input ng-model="vm.hours"/> 这是你的电话号码。与模型的交互正在工作。但是,格式化的时间不会在UI中更新。ngModelController.$parsers会在每次击键时解析您的值。由于您不知道用户何时准备好输入值,因此无法在每次更新时真

我试图创建一个指令,将十进制值格式化为时间值
h:mm
。如果用户输入时间值,则应使用十进制表示更新模型。如果用户输入十进制值,则应将其输入替换为格式化值

我使用的指令如下:

<input type="text" hour-input ng-model="vm.hours"/>

这是你的电话号码。与模型的交互正在工作。但是,格式化的时间不会在UI中更新。

ngModelController.$parsers
会在每次击键时解析您的值。由于您不知道用户何时准备好输入值,因此无法在每次更新时真正解析值。 假设您希望允许这些值

  • 五,
  • 五,
  • 5.5
  • 五点半
解析器不是您想要的方式。 我认为,当您将函数附加到模糊或更改事件上时,您可以获得所需的行为

差不多

element.bind('blur', function () {
      element.val(formatTime(element.val()));
    });

请将代码的相关部分包含到您的问题中,而不仅仅是提供plunker链接。这样,即使plunker链接失效,您的问题仍然有效。在更新控制器中的值后,您是否尝试调用scope.$apply()?我不是一个角度向导,但我发现在更新指令中的值和UI中未更新的结果时,这对我来说是可行的。@louis,
$apply
在代码中的位置是什么?我能否建议使用此链接以获得比我所能提供的更好的解释。您将看到他正在使用setViewValue()并调用render(),我相信render和apply最终都会导致出现摘要,这将更新该值。正如我所说,我不是一个棱角分明的巫师,只是从我与之斗争的角度出发。
element.bind('blur', function () {
      element.val(formatTime(element.val()));
    });