Javascript AngularJS更新ng通过输入重复不工作?

Javascript AngularJS更新ng通过输入重复不工作?,javascript,angularjs,angular-directive,Javascript,Angularjs,Angular Directive,我试图在ng模型上更新ng重复中的值 我有目前的指令: app.directive('myDirective', function () { return { require: 'ngModel', restrict: 'E', template: '<div ng-repeat="e in model"><input ng-model="e"/></div>', scope: { ngModel: '='

我试图在ng模型上更新ng重复中的值

我有目前的指令:

app.directive('myDirective', function () {
  return {
    require: 'ngModel',
    restrict: 'E',
    template: '<div ng-repeat="e in model"><input ng-model="e"/></div>',
    scope: { 
      ngModel: '='
    },
    link: function($scope, elem, attrs, ngModelCtrl) {
      $scope.$watch(function (){
          return ngModelCtrl.$modelValue; 
      }, function (v) {
          $scope.model = ngModelCtrl.$viewValue;
      });
    }
  };
});
app.directive('myDirective',函数(){
返回{
要求:'ngModel',
限制:'E',
模板:“”,
范围:{
ngModel:“=”
},
链接:函数($scope、elem、attrs、ngModelCtrl){
$scope.$watch(函数(){
返回ngModelCtrl.$modelValue;
},功能(五){
$scope.model=ngModelCtrl.$viewValue;
});
}
};
});
但它不会更新值,如图所示:


有人知道可能出了什么问题吗?

@Kiwi ng repeat创建子作用域,ng model将使用子作用域上的属性,因为ng model绑定将在当前作用域上求值。这就是为什么视图中呈现的json在您的示例中没有更改的原因,因为它绑定到了ng repeat指令创建的子作用域上的属性

检查一下,我希望它能对你有所帮助

<div ng-app="demo">
  <div ng-controller="DefaultController as ctrl">
    {{ctrl.numbers | json}}    
    <numbers numbers="ctrl.numbers"></numbers>
  </div>
</div>


angular
  .module('demo', [])
  .controller('DefaultController', DefaultController)
  .controller('NumbersController', NumbersController)
  .directive('numbers', numbers);

  function DefaultController() {
    var vm = this;
    vm.numbers = [1, 2, 3];
  }

  function numbers()
  {
    var directive = {
      restrict: 'E',
      scope: {
        numbers: '='
      },
      template: '<div ng-repeat="number in vm.numbers"><input type="number" ng-model="vm.numbers[$index]"/></div>',
      bindToController: true,
      controller: NumbersController,
      controllerAs: 'vm'
    };

    return directive;
  }

  function NumbersController() {
    var vm = this;
  }        

{{ctrl.numbers | json}}
有棱角的
.module('演示',[]))
.controller('DefaultController',DefaultController)
.controller('numbercontroller',numbercontroller)
.指令(“编号”);
函数DefaultController(){
var vm=这个;
vm.numbers=[1,2,3];
}
函数号()
{
var指令={
限制:'E',
范围:{
编号:'='
},
模板:“”,
bindToController:对,
控制器:数字控制器,
controllerAs:'vm'
};
返回指令;
}
函数编号控制器(){
var vm=这个;
}        

必须替换
$scope.model=ngModelCtrl.$viewValue带有
scope.model=ngModelCtrl.$viewValue并且工作正常

app.directive('myDirective', function () {
  return {
    require: 'ngModel',
    restrict: 'E',
    template: '<div ng-repeat="e in model"><input ng-model="e"/></div>',
    scope: { 
      ngModel: '='
    },
    link: function(scope, elem, attrs, ngModelCtrl) {
      console.debug()
      scope.$watch(function (){
          return ngModelCtrl.$modelValue; 
      }, function (v) {
          scope.model = ngModelCtrl.$viewValue;
      })
    }
  };
});
app.directive('myDirective',函数(){
返回{
要求:'ngModel',
限制:'E',
模板:“”,
范围:{
ngModel:“=”
},
链接:函数(范围、元素、属性、ngModelCtrl){
console.debug()
范围:$watch(函数(){
返回ngModelCtrl.$modelValue;
},功能(五){
scope.model=ngModelCtrl.$viewValue;
})
}
};
});
更新:我将“stuff”转换为对象数组,现在它可以工作了:

var-app=angular.module('angularjs-starter',[]);
应用程序控制器('MainCtrl',函数($scope){
$scope.name='World';
$scope.stuff=[{number:1},{number:2},{number:3}];
});
app.directive('myDirective',function(){
返回{
要求:'ngModel',
限制:'E',
模板:“”,
范围:{
ngModel:“=”
},
链接:函数(范围、元素、属性、ngModelCtrl){
console.debug()
范围:$watch(函数(){
返回ngModelCtrl.$modelValue;
},功能(五){
scope.model=ngModelCtrl.$viewValue;
console.log(scope.model)
})
}
};
});

Euhm,很抱歉,显然忘记保存,但问题不是显示输入,而是更新值,在您的示例中,问题存在如下well@kukkuz您必须使用了
ngModelCtrl.$render
,而不是监视更改
var app = angular.module('angularjs-starter', []);

app.controller('MainCtrl', function($scope) {
  $scope.name = 'World';

  $scope.stuff = [{number: 1},{number: 2},{number: 3}];
});

app.directive('myDirective', function () {
  return {
    require: 'ngModel',
    restrict: 'E',
    template: '<div ng-repeat="e in model"><input ng-model="e.number"/></div>',
    scope: { 
      ngModel: '='
    },
    link: function(scope, elem, attrs, ngModelCtrl) {
      console.debug()
      scope.$watch(function (){
          return ngModelCtrl.$modelValue; 
      }, function (v) {
          scope.model = ngModelCtrl.$viewValue;
          console.log(scope.model)
      })
    }
  };
});