AngularJS - 当范围内的触发变量发生变化时,我的错误消息没有更新?
AngularJS - My error messages aren't updating when their trigger variables are changed in the scope?
我是 Angular 的新手,所以这可能是一个非常简单的问题,答案非常明显,但我无法通过阅读类似的帖子来解决这个问题,所以我想我在这里问一下。
基本上我有一个文本输入字段,我试图根据其中是否包含任何内容来实时在其下方发出错误消息 appear/dissapear(我也其他字段有不同的错误消息,但会 appear/dissapear 基于不同的标准,所以将其设置为必填字段作为快速修复对我的其他目的不起作用)
据我所知,当我输入或删除文本时,触发器变量正在更新,但错误消息本身显然没有收到备忘录,只是保持原样。
这是我目前所拥有内容的精简版
查看:
<div class="col-sm-12">
<form class="form-horizontal" autocomplete="off" name="createRiskAssessmentForm">
<div class="form-group">
<label for="inputRiskNameId" class="col-sm-2">Name:</label>
<div class="col-sm-6">
<input id="inputRiskNameId" class="form-control" type="text" ng-model="riskAssessmentTable.name" name="riskNameField">
<div ng-hide="$scope.nameFieldHasContent" class="alert alert-danger">This field is required!</div>
</div>
</div>
</form>
</div>
控制器:
'use strict'
module.exports = function (module) {
module.controller('CreateRiskAssessmentTableController', ['$scope', '$rootScope', function($scope, $rootScope) {
$scope.$watch('riskAssessmentTable.name', function(name) {
if (name == '') {
$scope.nameFieldHasContent = false;
}
else {
$scope.nameFieldHasContent = true;
}
console.log('Name field has content?: ' + $scope.nameFieldHasContent);
});
}]);
};
我做错了什么?
我认为这行不正确:
<div ng-hide="$scope.nameFieldHasContent" class="alert alert-danger">This field is required!</div>
删除“$scope”。关于 ng-hide 的部分,将其更改为:
<div ng-hide="nameFieldHasContent" class="alert alert-danger">This field is required!</div>
您还可以查看 angular 指令 ng-dirty 和 ng-valid 来帮助解决这个问题。
由于 ng-modal 指向对象 riskAssessmentTable.name
,您必须在控制器中预先定义 riskAssessmentTable
。试试下面的代码。
module.exports = function (module) {
module.controller('CreateRiskAssessmentTableController', ['$scope', '$rootScope', function($scope, $rootScope) {
$scope.riskAssessmentTable = {};
$scope.$watch('riskAssessmentTable.name', function(name) {
if (name == '') {
$scope.nameFieldHasContent = false;
}
else {
$scope.nameFieldHasContent = true;
}
console.log('Name field has content?: ' + $scope.nameFieldHasContent);
});
}]);
};
我是 Angular 的新手,所以这可能是一个非常简单的问题,答案非常明显,但我无法通过阅读类似的帖子来解决这个问题,所以我想我在这里问一下。
基本上我有一个文本输入字段,我试图根据其中是否包含任何内容来实时在其下方发出错误消息 appear/dissapear(我也其他字段有不同的错误消息,但会 appear/dissapear 基于不同的标准,所以将其设置为必填字段作为快速修复对我的其他目的不起作用)
据我所知,当我输入或删除文本时,触发器变量正在更新,但错误消息本身显然没有收到备忘录,只是保持原样。
这是我目前所拥有内容的精简版
查看:
<div class="col-sm-12">
<form class="form-horizontal" autocomplete="off" name="createRiskAssessmentForm">
<div class="form-group">
<label for="inputRiskNameId" class="col-sm-2">Name:</label>
<div class="col-sm-6">
<input id="inputRiskNameId" class="form-control" type="text" ng-model="riskAssessmentTable.name" name="riskNameField">
<div ng-hide="$scope.nameFieldHasContent" class="alert alert-danger">This field is required!</div>
</div>
</div>
</form>
</div>
控制器:
'use strict'
module.exports = function (module) {
module.controller('CreateRiskAssessmentTableController', ['$scope', '$rootScope', function($scope, $rootScope) {
$scope.$watch('riskAssessmentTable.name', function(name) {
if (name == '') {
$scope.nameFieldHasContent = false;
}
else {
$scope.nameFieldHasContent = true;
}
console.log('Name field has content?: ' + $scope.nameFieldHasContent);
});
}]);
};
我做错了什么?
我认为这行不正确:
<div ng-hide="$scope.nameFieldHasContent" class="alert alert-danger">This field is required!</div>
删除“$scope”。关于 ng-hide 的部分,将其更改为:
<div ng-hide="nameFieldHasContent" class="alert alert-danger">This field is required!</div>
您还可以查看 angular 指令 ng-dirty 和 ng-valid 来帮助解决这个问题。
由于 ng-modal 指向对象 riskAssessmentTable.name
,您必须在控制器中预先定义 riskAssessmentTable
。试试下面的代码。
module.exports = function (module) {
module.controller('CreateRiskAssessmentTableController', ['$scope', '$rootScope', function($scope, $rootScope) {
$scope.riskAssessmentTable = {};
$scope.$watch('riskAssessmentTable.name', function(name) {
if (name == '') {
$scope.nameFieldHasContent = false;
}
else {
$scope.nameFieldHasContent = true;
}
console.log('Name field has content?: ' + $scope.nameFieldHasContent);
});
}]);
};