在angular指令中更新相同的值

时间:2015-10-21 10:52:39

标签: javascript angularjs

我一直在尝试更新angular指令中的输入值 问题:当我第一次更新值时它可以工作,但是当我用与第一次相同的值更新它时。它添加值

return {
require: 'ngModel',
link: function(scope, element, attrs, ctrl) {

    element.datetimepicker({
        weekStart: 1,
        todayBtn: 1,
        todayHighlight: 1,
        startView: 2,
        forceParse: 0,
        format: attrs.format ? attrs.format : "yyyy/MM/dd"
    }).on('changeDate', function(ev) {
        var dateUTC = new Date(ev.date.getTime() + (ev.date.getTimezoneOffset() * 60000));
        var masking = $filter('mapDateTimeFormat')(attrs.format ? attrs.format : "yyyy/MM/dd");
        var filterApply = $filter('date')(dateUTC, masking);
        $parse(attrs.ngModel).assign(scope, filterApply);
        scope.$apply();
    });
}

第一次从日历中选择值时 23-10-15 ,但如果我再次更新相同的值,它会变成类似的东西 23-1010-2015 如果我选择其他日期,则会给我 23-10-16 值。

我无法弄清楚做错了什么

$parse(attrs.ngModel).assign(scope, filterApply);

为我提供 23-10-15 ,因此不知道错误值的更新

角度:棱角分明1.2.2

日历:引导程序日历

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

从UI中选择后,您需要重新格式化日期。使用Bootstrap日历选择日期时,它的日期格式不同,而普通的Date()返回不同的日期。您可以在日期使用$ watch并更改日期格式,然后再次设置为相同的变量。

查看以下链接,了解更多参考资料。

https://github.com/angular/angular.js/issues/3615

//从其他地方复制

您不希望替换scope.ngModel变量,而是替换该变量后面的值。当您读取链接函数第一行中的值时,您已经这样做了:

 currValue = parseInt(scope.$eval(attrs.ngModel))

如果它是一个普通的值,比如myProperty,你可以在范围内使用它:

scope[attr.ngModel] = newValue

但是如果你有一个表达式值,就像container.myProperty那样,这将不起作用。在这种情况下(这是更通用的类型,你应该瞄准)你必须评估设置到范围的值,如下所示:

scope.$eval(attrs.ngModel + "=" + newValue)

我必须承认,$ eval部分有点难看,因为它是在带有eval pendant的JavaScript中,但它可以解决问题。请记住,当您想要设置字符串值时,它可能无法以这种方式工作。那么你必须逃避这些价值观。

希望有所帮助;)