提交操作后无法更新$ rootScope值

时间:2015-04-17 16:43:13

标签: javascript angularjs

我是AngularJS的初学者。但是,我在提交表单后无法更新$ rootScope值,它将被返回为未定义。

控制器:

app.controller('campaignCtrl', ['$scope', '$rootScope', function($scope, $rootScope) {
  $scope.submit = function() {
    $rootScope.campaign = this.campaign;
  };

}]);

形式:

<form class="holder" name="campaignForm"  ng-submit="submit()" >
      <div class="form-group" show-errors>
        <label for="inputDate">Date</label>
        <p class="help-block"><em>Ex: 12/10/2015</em></p>
        <input type="date"  class="form-control" name="inputDate" ng-model="campaign.date" id="inputDate" required>
      </div>
     <button type="submit" class="btn btn-lg btn-default pull-right">Submit</button>
</form>

3 个答案:

答案 0 :(得分:0)

尝试

$scope.submit = function() {
  $rootScope.campaign = $scope.campaign;
};

编辑:

尝试从按钮中删除type="submit"。可能是您的处理程序没有被调用,因为浏览器会自动处理表单提交(尽管您可以通过在该函数中添加日志来验证)。

<button class="btn btn-lg btn-default pull-right">Submit</button>

编辑2:

根据评论我们的对话:$rootScope不会在请求中保留。您需要将其存储在永久性的位置(如本地存储或cookie),或者将其传递给服务器,如果要保留该值,则将其传递回客户端。我敢打赌,如果你在$scope.submit函数中添加一个日志,那么在那里有一个值。

答案 1 :(得分:0)

检查一下。您的代码似乎是正确的,除了您在输入

上缺少结束标记
`http://jsfiddle.net/ashishmusale/2001cf6r/`

答案 2 :(得分:0)

我使用了您的代码并在$watch上添加了$rootScope.campaign,效果很好。

.controller('someController', function($scope, $rootScope) {
    $scope.submit = function() {
        $rootScope.campaign = $scope.campaign;
    };

    $rootScope.$watch('campaign', function(newVal, oldVal) {
        if(newVal !== oldVal) {
             console.log("New Val = ");   
            console.log(newVal);
        }
    });
});

JSFiddle

如果您正在寻找在页面刷新过程中持续存在的内容,那就不是$rootScope。看看这样的事情:AngualrJS: sustaining data on html refresh