Angularjs 更改视图值而不更改模型值

Angularjs 更改视图值而不更改模型值,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我在数据库中以分钟为单位存储我的小时字段,所以我需要更改以小时为单位显示的值 我还没有密码 我考虑了一些备选方案,我想知道是否有人尝试过: 1ª我会将一个指令作为属性,并将该值作为该指令的属性传递,对该值执行我需要的操作,然后将最终值(如15:59)放入元素中 2ª我也将制定一个指令,但该指令将是一个自我控制的元素,当用户输入值时,我将转换为分钟,但在视图中将保留用户输入值 更好的方法是什么?创建一个过滤器 app.filter('minutesToHourFormatFilter', func

我在数据库中以分钟为单位存储我的小时字段,所以我需要更改以小时为单位显示的值

我还没有密码

我考虑了一些备选方案,我想知道是否有人尝试过:

我会将一个指令作为属性,并将该值作为该指令的属性传递,对该值执行我需要的操作,然后将最终值(如15:59)放入元素中

我也将制定一个指令,但该指令将是一个自我控制的元素,当用户输入值时,我将转换为分钟,但在视图中将保留用户输入值

更好的方法是什么?

创建一个过滤器

app.filter('minutesToHourFormatFilter', function() {
      return function(input) {
      var b = input / 60;
      var hours = b.toFixed(0);
      var c = (b - hours) * 60;
      var minutes = Math.ceil(c)
      return hours + "h " + minutes + "m"
      }
    });
然后在模板中,您可以执行以下操作:

{{ minutes | minutesToHourFormatFilter}}

这取决于您是否需要用户输入。如果需要,则必须使用双向指令,如下所示

在角度指示链接函数中,有4个参数:

function (scope, element, attrs, controller)
控制器参数允许您操作指令的ng模型。最重要的是,控制器有一个叫做$formatters和$parser的东西。这些$formatters和$parser允许您完全执行您要执行的操作,因为它允许您在指令中操作模型和查看值

格式化程序将允许您设置如何在视图中查看模型(初始加载) 解析器将允许您设置如何将视图保存到模型(用户输入)

这可以通过以下方式完成:

directive code
....
link: function (scope, element, attrs, controller) {
   function hoursToMinutes(viewValue){
     viewValue = ...Conversion logic...
     controller.$viewValue = viewValue;
     return viewValue;
   }
   function minutesToHours(modelValue){
     modelValue= ...Conversion logic...
     controller.$modelValue= modelValue;
     return modelValue;
   }
   controller.$parsers.push(hoursToMinutes);
   controller.$formatters.push(minutesToHours);
}
....

从文档中,
解析器
转换
视图值
,因此最终有一个不同的模型值。例如用于消毒。
格式化程序
不会更改模型本身,而是更改DOM中的外观,就像
过滤器
一样。您能解释一下为什么要添加这些行:
controller.$viewValue=viewValue
控制器。$modelValue=modelValue是否要调整其他部件?因此,如果模型值更改,则需要更新视图,反之亦然。然后不会
controller.$setViewValue(viewValue);控制器。$render()
更好吗?$formatters仅在页面加载时运行$解析器在输入更改时启动。如果要更改视图的值以及用户类型,则需要添加$setViewValue和$render。