为什么要将旧值和新值与角度表进行比较,以确定它们是否相等

时间:2016-05-18 14:07:44

标签: angularjs

我遇到了作者正在做的this answer

$scope.$watch('myObject', function(newValue, oldValue){
    if(angular.equals(newValue, oldValue)){
         return; 
     }
});

为什么newValue和oldValue在这里会一样?我对$watch的理解是,它只会在myObject更改时触发。我错过了什么?

3 个答案:

答案 0 :(得分:1)

在使用$watchCollection的情况下,这完全没用。你指出的答案没有添加任何东西。然而,原始问题是有意义的,使用10 192.0109ms 3 &{{0xc082082900}} <nil> 9 192.0109ms 3 &{{0xc082082780}} <nil> 8 192.0109ms 3 &{{0xc082082000}} <nil> 7 197.0112ms 3 &{{0xc082015c80}} <nil> 6 227.0129ms 3 &{{0xc082082300}} <nil> 5 372.0212ms 3 &{{0xc082082180}} <nil> 4 375.0214ms 0 &{{0xc082015e00}} <nil> 3 375.0214ms 3 &{{0xc082082600}} <nil> 2 375.0214ms 3 &{{0xc082082480}} <nil> 1 378.0216ms 3 &{{0xc082082a80}} <nil> 时为known bug

答案 1 :(得分:0)

public Entities() : base("name=Entities")
    {
    }

    public Entities(string connectionstring) : base(connectionstring)
    {
        this.Configuration.LazyLoadingEnabled = true;
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }
}

plnkr 在此示例中,我们匹配新旧字符串以执行搜索/发送API搜索请求

这样做的原因是在搜索字段中输入数据时最小化API请求,如果用户在该时间内未输入任何内容,则会检查一段时间之后检查这就是为什么我们匹配新旧值

答案 2 :(得分:0)

我发现如果第一次更改值时调用$ watch,则两个参数都将设置为新值。这是由角度中的以下代码引起的: fn(value, ((last === initWatchVal) ? value : last), current);

fn是您的处理程序,last是旧值,初始化为名为initWatchVal的标记函数,value是观察模型的当前状态。因此,在我们有一个“真实”旧值之前,第二个参数设置为value,因此两个参数是相同的。