Angular JS - 如何在表单提交后隐藏ng-message;有效进入

时间:2015-07-29 13:06:31

标签: angularjs forms ng-messages

我正在使用AngularJS消息构建一个简单的表单。 基本上我想要发生的是:

  • 用户提交表单,显示并阻止所有相应的错误 提交
  • 用户然后完成字段和错误,在关注'之后逐个隐藏领域($ touch?)

第一点工作正常,但我无法弄清楚第二部分,之后我根本无法隐藏错误信息。我确定我错过了一些简单的事情,但其他相关问题并没有太多帮助。

有什么想法吗?

<form name="orderForm" 
      ng-submit="orderForm.$valid && placeOrder()" novalidate>

   <input type="text" 
       ng-model="orderParams.delivery_address.full_name" 
       name="fullName" required />

   <p ng-message="orderForm.fullName.$error" 
      ng-if="orderForm.fullName.$invalid && orderForm.$submitted">
      This field is required</p>

   <input type="submit" value="Submit" />

</form>

3 个答案:

答案 0 :(得分:2)

对我来说,问题是通过向我的模块依赖项添加ngMessgaes来解决的。

我安装之前已经安装了bower,但是忘了将它添加到模块依赖项中。由于某种原因,它没有造成任何错误它只能阻止我的错误消息隐藏。

答案 1 :(得分:0)

你需要做三件事: 1.在控制器中添加一个布尔变量,如:“showMessageBox”,设置为true。 2.当您提交时,将“showMessageBox”设置为false。 3.在你的消息框中放置ng-show指令并将其绑定到“showMessageBox”变量

答案 2 :(得分:0)

我其实只是想出来了。我使用的是Angular 1.4.2,看起来Angular Messages现在是核心构建的一部分,我之前没有注意到它(我只是忘记注入角度模块) ,删除了angular-messages.js文件(这可能导致冲突),上面的代码工作正常。

任何人都知道为什么code.angularjs.org上仍然可以使用单独的模块? - $scope.novoCampo = function (index) { var deferred = $q.defer(); contatosAPI.getDados().then(function (response) { var campos = []; var listaContatos = response.data._embedded.contatos; for (var i = 0; i < listaContatos.length; i++) { var dados = listaContatos[i].dados; for (var j = 0; j < dados.length; j++) { var nomeCampo = dados[j].campo; if (campos.indexOf <= -1) { campos.push(nomeCampo); } } } deferred.resolve(campos); }).catch(function (error) { alert("Erro ao obter os campos!"); console.log(error + "\t" + JSON.stringify(error)); deferred.reject(status); }); deferred.promise.then(function (listaCampos) { //Here in my console.log is empty console.log("lista " + '\t' + JSON.stringify(listaCampos) + '\t' + listaCampos[0]); var modalInstance = $modal.open({ animation: $scope.animationsEnabled, templateUrl: 'novoCampo.html', controller: 'novoCampoController', size: '', resolve: { index: function () { return index } } }); modalInstance.result.then(function (result) { try { $scope.contatos[result.index].dados.push({ campo: result.nomeCampo, valor: "" }); } catch (error) { alert("Erro ao inserir novo campo!"); } }, function () { $log.info('Modal dismissed at: ' + new Date()); }); }, function (reject) { alert("erro" + reject); }); };