angularjs1.6 使用$setViewValue无法更新model数值

0 0 javascript
兄弟快醒醒
兄弟快醒醒

声望值:87 0人

2018-07-03 16:22:55 提问

关注 0关注

收藏 0收藏, 265浏览

视图代码

{{files}}

JS代码

var app = angular.module('app', []);
app.controller('appController', function ($scope) {
    $scope.files = '1,2,3,4';
});

app.directive('imageUploads', function () {
    return {
        require: '?^ngModel',
        restrict: 'EA',
        template: '

setModel{{image}}

', link: function ($scope, element, attrs, ngModel) { ngModel.$formatters.push(function (modelValue) { var images = new Array(); if (!ngModel.$isEmpty(modelValue)) { var values = modelValue.split(","); for (var j = 0; j < values.length; j++) { images.push({ 'id': values[j] }); } } return images; });

ngModel.$parsers.push(function (viewValue) { var s = ""; for (var j = 0; j < viewValue.length; j++) { if (viewValue[j].id != null) { if (j > 0) { s += ","; } s += viewValue[j].id; } } return s; });

ngModel.$render = function () { $scope.images = ngModel.$viewValue; };

$scope.del = function (i) { $scope.images.splice(i, 1); ngModel.$setViewValue($scope.images); }; $scope.set = function () { console.log('set'); $scope.images = [{id: 5}, {id: 6}, {id: 7}]; ngModel.$setViewValue($scope.images); } } }; });

无法更新Model

使用set函数可以改变ngModel值,并且通过管道函数$parsers,然而del函数使用了splice处理数组,却无法通过管道函数并且实现更新model值。

我尝试过使用$scope.$apply()在ngModel.$setViewValue($scope.images)后执行,依然无法解决。

使用的angular版本为1.6.6。

在线运行代码,在线代码链接,希望大家帮我看下问题到底出现在哪里?

请先 登录 后评论

0个回答

注册新账号

悬赏追问
10
  • 10
  • 20
  • 50
  • 100
  • 200
  • 输入数值
发布追问