在angularjs中将表单输入设置为dirty?

时间:2013-11-30 00:00:50

标签: angularjs firebase

我有一个表单,我自动将当前日期输入到输入字段。我想将输入字段设置为脏,因为当它尝试与firebase同步时,除非您与其进行交互,否则不包括该输入字段。

我尝试过以下不同形式的......以及我不知所措。

var now = new Date();
  $scope.load = function () {
    if (!$rootScope.auth) {
      $location.path('/a/');
    } else {
      $scope.logs = Logs.list($scope);
      $scope.newDate = now;
      $scope.logForm.$setDirty(true);
    }
  };
<form name="logForm" novalidate class="css-form">
      <div class="form-group input-group">
        <input class="form-control" name="action" placeholder="Action" type="text" value="{{newAction}}" ng-model="newAction" required />
        <div class="input-group-addon">
          <i class="fa fa-rocket"></i>
        </div>
      </div>
      <div class="form-group input-group">
        <input class="form-control" name="quantity" placeholder="Quantity" type="number" value="{{newQuantity}}" ng-model="newQuantity" ng-pattern="/^[0-9]*$/" />
        <div class="input-group-addon">
          <i class="fa fa-plus-square"></i>
        </div>
      </div>
      <div class="form-group input-group">
        <input class="form-control" name="location" placeholder="Location" type="text" value="{{newLocation}}" ng-model="newLocation" />
        <div class="input-group-addon">
          <i class="fa fa-map-marker"></i>
        </div>
      </div>
      <div class="form-group input-group">
        <input class="form-control" name="date" placeholder="Date" type="datetime" value="{{newDate}}" ng-model="newDate" />
        <div class="input-group-addon">
          <i class="fa fa-calendar"></i>
        </div>
      </div>
      <button class="btn btn-info btn-block" ng-click="create()">Add log</button>
    </form>

1 个答案:

答案 0 :(得分:1)

form标记创建自己的范围,因此为了拥有可靠的范围结构,我们不应该使用基元来表示ng-model值。

为了确保我们可以访问表单控制器,我们必须将表单初始化延迟到下一个摘要周期。这是通过使用$timeout服务来实现的。

http://jsbin.com/OvIvIHO/3/

jsbin包含更新版本