【问题标题】:Error: Expression 'undefined' used with directive is non-assignable错误:与指令一起使用的表达式“未定义”是不可赋值的
【发布时间】:2015-03-16 12:58:01
【问题描述】:

在这里摆弄http://jsfiddle.net/prantikv/dJty6/36/

我有像这样的 json 数据

$scope.info={
 "company1":"this",
 "company2":"is",
  "company3":"sparta"
}

我正在使用ng-repeat 打印所有数据,我想监控字段的变化。

 <input type="text" ng-repeat="item in info" value="{{item}}" monitor-change>

我有一个这样的 monitorChange 指令:

.directive('monitorChange', function() {
  return {
    restrict: 'A',
    scope: {changedFlag: '='},
    link: function(scope, element, attrs) {
      var $el = angular.element(element);
      $el.on('keyup', function() {//bind to element
          scope.$apply( function() {
            scope.changedFlag =true;//on key press value is changed
          });
      });
    }
  };
}); 

尝试更改数据时,收到错误Error: [$compile:nonassign] Expression 'undefined' used with directive 'monitorChange' is non-assignable!

我正在打印视图中的数据:

{{changedFlag }}

代码有什么问题?

【问题讨论】:

  • 您应该发布您收到的实际错误消息。我会用完整的错误为你更新问题。
  • scope: {changedFlag: '='}, 但您没有在 HTML 中声明任何 changed-flag 属性。

标签: javascript json angularjs


【解决方案1】:
  1. 正如您在指令定义中提到的scope: {caretPosition: '='},我们需要在标记中传递caret-position="obj.changedFlag"
  2. 由于ng-repeat 为每个项目创建了一个新范围,因此最好使用点符号表示更改以反映在控制器的范围中。

这是更新的小提琴。 http://jsfiddle.net/dJty6/38/

【讨论】:

  • 另请注意,这可能是误报;目前无法将此值改回false;一旦值更改为true,即使用户所做的所有更改都已撤消,它仍将保持true
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
  • 2013-04-24
  • 2014-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-04
相关资源
最近更新 更多