值未在视图中更新

时间:2015-10-07 21:25:28

标签: angularjs

使用下面的代码,即使application/x-www-form-urlencoded发生更改,age2也不会更新。

age

有人能告诉我它有什么问题吗?如果我将<div ng-app="myApp" ng-controller="myController"> <input type="text" ng-model="age" placeholder="Name"></input> <input type="text" ng-model="firstName" placeholder="First name"></input> <h1>Hi there, {{ firstName }}, you are {{ age }} year old, age2 is {{ age2 }}!</h1> var app = angular.module('myApp', []); app.controller('myController', function($scope){ $scope.age = 20; $scope.age2 = parseInt($scope.age) + 1; }); 更改为函数:

age2
但它运作良好。我知道Angular会检查值是否已更改,如果它在两个连续的“检查”中保持不变,则会更新视图。如果它花了太长时间,那么这些值可能会永远改变,并且会引发错误(从我所理解的)。

2 个答案:

答案 0 :(得分:1)

有几种方法可以处理它。

使用观察者:

  $scope.$watch('age', function(newVal, oldVal) {
    $scope.age2 = parseInt(newVal) + 1;
  })

使用控制器中的功能:

  $scope.parseAge = function(age) {
    return parseInt(age) + 1
  }

{{ parseAge(age) }}

或使用过滤器:

app.filter('parseAge', function() {
  return function(input) {
    return parseInt(input) + 1; 
  }
});

{{ age | parseAge }}

答案 1 :(得分:0)

直接回答这个问题:

在第一种情况下,您只在控制器首次初始化时指定age2的值。没有继承或手表会改变这个价值。

当它是视图中调用的函数时,它将被重新评估每个摘要。

如果您正在使用像您所拥有的简单操作,您还可以在视图中添加许多其他方法以使其工作

{{ +age +1 }}