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