【问题标题】:Can't update $rootScope value after submit action提交操作后无法更新 $rootScope 值
【发布时间】:2015-04-18 01:10:45
【问题描述】:

我是 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>

【问题讨论】:

  • 该函数中的this 是什么?我敢打赌,这不是您想的那样,您将 undefined 分配给 $rootScope.campaign
  • 我不赞成您在这种情况下使用this。您的campaign 对象正在$scope 中建模,因此您很可能希望它为$rootScope.campaign = $scope.campaign
  • 我已经尝试过了,但没有成功.. $rootScope.campaign 仍然未定义;(
  • 你如何验证它是未定义的?
  • 这就是原因。 $rootScope 在页面刷新时不会持续存在。它会在每次页面加载时重新初始化。

标签: javascript angularjs


【解决方案1】:

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

.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

【讨论】:

  • 它就像一个魅力!现在,我将尝试在页面刷新时将其持久化。谢谢!
  • 我可以在服务/工厂内的页面刷新之间共享提交的值吗?
【解决方案2】:

检查这个。您的代码似乎是正确的,只是您在输入中缺少结束标记

`http://jsfiddle.net/ashishmusale/2001cf6r/`

【讨论】:

【解决方案3】:

试试

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

编辑:

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

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

编辑 2:

根据我们通过 cmets 的对话:$rootScope 不会在请求中持续存在。如果您想保留该值,您需要将其永久存储在某个地方(如本地存储或 cookie)或将其传递给服务器,然后再返回给客户端。我敢打赌,如果你在 $scope.submit 函数中添加一个日志,它在那里有一个值。

【讨论】:

  • 同样的问题.. 它没有更新全局 $rooScope 活动变量.. =(
  • 好吧,我也有别的想法。
  • 再次感谢您的回答!不幸的是,$rootScope 变量尚未更新。几个小时前,我试图从同一个提交操作更新服务内的数组,但数组也没有更新。所以,我来到这个带有 $rootScope 变量的简单示例,以了解为什么提交表单后全局值未更新..
  • 您如何检查它是否未定义?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
相关资源
最近更新 更多