在工厂中调用angular.copy之后,url / state更改不起作用

时间:2016-06-01 06:27:09

标签: angularjs node.js angular-ui-router

我在这个问题上的斗智尽头,所以非常感谢任何帮助!

过去几周我一直在创建一个角度/节点/ mysql应用程序,并遇到了这个问题。我有一个运行mysql的数据库,用于存储用户及其信息的列表。我创建了一个API,为前端提供访问用户数据的权限,以便进行登录。流程如下:

用户进入新状态,需要预先加载有关它们的信息:

.state('info', {
        url: '/info',
        templateUrl: 'views/info.html',
        controller: 'InfoController',
        resolve: {
            postPromise: ['user', function(user) {
                return user.loadInfo();
            }]

代码在用户工厂中运行,以便在页面加载之前获取数据:

app.factory('user', ['$http', 'auth', function($http, auth) {
    var user = {};

    user.loadInfo = function() {
        var userId = auth.currentUser();
        return $http.get('/users/' + userId).success(function(data) {
            angular.copy(data, user);
        });
    };

    return user;
}]);

第一次页面加载正常。然后我通过$ state.go('home')或其他东西导航到其他地方,当我尝试返回同一页面(/ info)时,它有时不起作用。我输入新的网址会发生什么,浏览器基本上忽略它,只显示当前页面的网址。

  1. 从localhost:8080 /#/ home
  2. 开始
  3. 输入localhost:8080 /#/ info并转到那里
  4. 第一次工作正常。导航到localhost:8080 /#/ home
  5. 现在在localhost:8080 /#/ home
  6. 键入localhost:8080 /#/ info,浏览器忽略它,只显示localhost:8080 /#/ home
  7. 我已经尝试评论出angular.copy,这似乎解决了这个问题,但我仍然需要复制我从服务器获取的数据(成功传输)。

    所以我的主要问题是:我可以使用angular.copy的替代方案吗?我仍然觉得它在所有的例子中使用都很奇怪,但是这里引起了这个问题。

    次要问题:如果找到angular.copy的话,有没有人看到过这个问题,并猜测是什么导致了这个问题?在我正在做的事情中,有什么东西可以看出来吗?

    奖励信息:我不知道如何描述这一点,但有时候如果我等了很长时间才能回到问题网址,那就行了......我注意到一个电话是当我在输入问题网址时(甚至在点击输入之前)输入服务器,当发生这种情况时,似乎工作正常。但它是断断续续的,并且如果通过按钮点击调用它们,则停止任何$ state.go()调用工作到该问题URL。

1 个答案:

答案 0 :(得分:0)

好吧,我得到了这个答案,而且非常愚蠢。 "用户"是工厂内部的一个对象," loadInfo"是附加到用户的功能。当我执行angular.copy()时,来自服务器的数据覆盖了loadInfo函数,因此我无法再次使用它...

所以是的,那已经解决了。