获取错误:ngModel:AngularJs中的非分配不可分配表达式

时间:2016-05-20 09:15:09

标签: angularjs

我有一个紧张的时刻试图解决这个问题,但我在我的视图中使用ng-repeat循环遍历数组:

//Array from controller  that i'm receiving from a server 

    $scope.data =[{Day: 'Monday', startTime: '2016-03-29T12:30:00', finishTime: '2016-03-29T16:30:00'},
    [{Day: 'Tuesday', startTime: '2016-03-29T12:00:00', finishTime: '2016-03-29T18:00:00'},
       ]
//Then looping through like this:

    <div ng-repeat="a in data track by $index">

    <input ng-model="a.day">
    <input ng-model="a.startTime | data: 'hh:mm'">
    <input ng-model="a.finishTime | data: 'hh:mm'">

    </div>

如您所见,我将过滤日期仅显示时间。通过管道过滤工作正常,时间显示,但我收到此错误消息:

  

Expression&#39; a.startTime |&#39;是不可转让的。元素:{1}

如果我只需要显示值,请执行以下操作

<input value={{a.startTime | date: 'hh:mm'}}  

但是在这种情况下我还需要从文本字段中获取值,这也就是我使用ng-model的原因。

由于此错误,我甚至无法编辑文本框中的时间。 在文本字段中绑定/分配时间的最佳解决方案是什么? 谢谢

2 个答案:

答案 0 :(得分:0)

你需要一个指令。像

这样的东西
module.directive('youDirective', function() {
    return {
        restrict: 'A',
        require: 'ngModel',
        link: function(scope, elem, attrs, controller) {
            if (!controller) {
                return;
            }

            controller.$parsers.unshift(function(value) {});

            controller.$formatters.unshift(function(value) {});
        }
    };
});

$formatters中格式化视图值,在$parsers中解析模型的视图值。

答案 1 :(得分:0)

您可以通过下一种方式执行此操作:

1)将日期转换为Date对象

$scope.data =[{Day: 'Monday', startTime: new Date('2016-03-29T12:30:00'),....

2)使用input [date]指令

<input type="date" ng-model="a.startTime">

请参阅doc here