【问题标题】:Angular 1 Non-Assignable ExpressionAngular 1 不可赋值表达式
【发布时间】:2018-01-10 17:43:52
【问题描述】:

我有两个角度函数,它们根据其他函数返回属性。当我只是连接属性时,这很好用,但给了我一个“不可分配的表达式”错误。当我调用工厂时,它什么也没返回。

案例 1 - 有效(但会引发 Non-Assignable Expression 错误)

HTML

<input type="text" class="form-control" id="inputClearCasePassword" ng-model="clearCasePassword()" readonly>

角度控制器

$scope.clearCasePassword = function(){
  return $scope.model.property1 + $scope.today + $filter('uppercase')($scope.model.property2);
}

案例 2 - 返回错误

HTML

<input type="text" class="form-control" id="inputencryptedPassword" ng-model="encryptedPassword()" readonly>

角度控制器

$scope.encryptedPassword = function(){
  return encryptionRepository.HMACSHA1($scope.clearCasePassword, $scope.model.encryptionKey);
}

这是工厂的样子:

app.factory('encryptionRepository', function() {
  return {
    HMACSHA1: function(text, key) {
        var encrypted = CryptoJS.HmacSHA1(text, key );
        return CryptoJS.enc.Hex.stringify(encrypted);
    }
  };
});

【问题讨论】:

  • 尝试像&lt;input type="text" class="form-control" id="inputencryptedPassword" ng-model="encryptedPassword" readonly&gt;这样删除ng-model属性中的括号
  • 嗨。做同样的事情。刚刚注意到错误实际上是在第一个示例中。抛出错误,但仍然显示正确的响应(连接字符串),但第二个什么都不做
  • 查看Angular docs 让我认为问题出在ng-model 分配中
  • 你不应该使用 [ng-model] 表达式,参见 angular 文档docs.angularjs.org/error/ngModel/nonassign
  • 是的。我认为这是因为该值是从函数返回的,所以它不能以两种方式绑定它。我已经通过使用 解决了这个问题

标签: javascript angularjs


【解决方案1】:

ng-model 必须是对象属性,不能是表达式。想象一下,如果您编辑输入,它将在哪里保存您的价值?

您需要先将值分配给属性,然后在ng-model中使用它

$scope.password = value1 + value2 + value3;
<input ng-model="password" />

好的,我看到您在输入上使用了readonly。在这种情况下,您可以使用ng-value 而不是ng-model

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多