【问题标题】:AngularJS link not working, but manual page refresh works fineAngularJS 链接不起作用,但手动页面刷新工作正常
【发布时间】:2013-09-25 13:55:55
【问题描述】:

我正在使用 AngularJS 开发这个网站。我有一个问题,当我点击导航链接(带有 href 的标签)时,url 正在改变,但页面内容没有得到更新。因此,如果我单击“关于”链接,则 url 会被修改为 #/about,而不是内容。但是,如果我现在手动刷新页面,内容就会加载。

查看网站:www.arunmahendrakar.com/nsm/

链接是“外部”Angular,我不确定我需要在哪里添加 $apply 函数,如果有的话。

nsm.controller.js 包含路由和控制器详细信息,nsm.services.js 包含从服务器获取数据的服务,nsm.directives.js 用于突出显示当前链接。

index.html 页面使用 bootstrap 3.0。

请告诉我如何解决此问题。

【问题讨论】:

  • 我不知道这对您来说是否很正常,但您在控制台中收到消息错误:OPTIONS arunmahendrakar.com/nsm/data/about.txt Origin arunmahendrakar.com is not allowed by Access-Control-Allow-Origin。
  • Thomas 真奇怪,因为以前没见过。
  • 这是你的问题,你不在同一个来源。因此出于安全原因网络中止。看看cors

标签: jquery html twitter-bootstrap angularjs


【解决方案1】:

当您导航时,页面上会闪烁,因此 Angular 会注意到更改并尝试更新页面。

问题看起来像你的directives.js,它在$location.path() 上添加了一个监听器

scope.$watch('location.path()', function (newPath) {...});

根据here的讨论,你想用

$scope.$watch(function() {return location.path()}, function(path) {...});

可能对 $location.path() 的调用会干扰路由。

编辑

以下可能会解释它:

services.factory('pageData', ['$resource', '$route',
   function ($resource, $route) {
       // this is done so I can run the e2e tests from the :8000 port
       //debugger;
       var slug = ($route.current.params.slug || 'home') + '.txt';
       return $resource('http://arunmahendrakar.com/nsm/data/:slug', { slug: slug });
   }]);

services.factory('pageDataLoader', ['pageData', '$q',
  function (pageData, $q) {
      return function () {
          var delay = $q.defer();
          pageData.query(function (pData) {
              delay.resolve(pData);
          }, function () {
              delay.reject('Unable to fetch data');
          });
          return delay.promise;
      };
  }]);

pageData 工厂返回一个 $resource 对象。这仅在页面加载时调用一次。 pageDataLoader 工厂返回一个函数。每次实例化 pageDataLoader 时都会调用此函数。

【讨论】:

  • 不是那个山姆。我没有故意启用这些图像。图片内容在本地运行良好。
  • 不。所以为了排除这种可能性,我已经从应用程序中完全删除了指令代码的所有引用。我仍然面临同样的问题。但是,我看到当我单击另一个链接时,它仍然从缓存中加载 home.txt(请参阅开发工具中的网络跟踪),尽管文本文件应该不同。上述链接中的应用程序已更新。如果有帮助,我可以上传代码。
  • 我使用您之前编辑的 cmets 作为指令的更改。虽然这不是导致问题的原因,但它是更好的代码。我同意你对 $resource 的最后评论。我将代码更改为 .get 并解决了所有问题。非常感谢山姆。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-03
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多