当angularjs重新加载ngView时,innerHTML被删除

时间:2014-07-17 19:24:52

标签: javascript ajax angularjs angularjs-routing

修改
如果我将数据放入全局对象,我可以检查全局对象的内容。如果全局对象已经有数据,则终止该函数,不要运行另一个AJAX请求,并将全局对象中的HTML注入页面。使用$scope$http似乎无法解决问题。如果有人有更好的解决方案,我很高兴知道它。

这就是我希望它工作的方式,但是那个plunker没有页面路由:

plunker - inject HTML into two different pages. Content saved in $scope

我的网站有一个名为STORES的页面。当用户单击STORES菜单并加载STORES页面时,AJAX将获取所有商店名称,并将所有商店名称放入STORES页面。商店名称的HTML添加了innerHTML。每次angularjs再次加载模板时,注入商店名称的HTML似乎都会丢失。我有每次加载STORES页面时运行的代码。该代码检查具有所有商店名称的UL标签是否具有任何childNodes,如果该值为零,则添加商店名称。每次我导航到STORES页面,并且angularjs加载页面时,UL标签没有子节点。 (所有商店名称都消失了。)我希望能够检索商店名称并仅注入一次HTML内容,而不需要再次运行它。

  • 用户点击STORES菜单项
  • 网址已更改
  • angularjs检测到网址更改
  • angularjs route加载templateURL
  • HTML页面中的ng-controller因为它位于HTML元素中而触发
  • 代码检查页面中是否有任何商店名称。
  • 如果没有商店名称,则控制器运行AJAX以获取数据
  • 数据以HTML格式注入UL元素

一切正常。代码没有被破坏。代码中没有任何错误。我只想要一种方法来保持每次angularjs重新加载页面时丢失注入的HTML。

HTML

<ul id='storesCat'></ul>

上述UL元素接收HTML。下面的元素包含UL标记。

<section ng-controller="HideShowInStores">
  <ul id='storesCat'></ul>
</section>

当angularjs路由到页面时,控制器&#34; HideShowInStores&#34;触发一些代码运行。

if (elStoreList.childNodes.length === 0) {
  console.log('there are NO child nodes: ');
  .....  Code left out here for sake of condensing the code
  htmlToInject = xmlhttp.responseText;

  elStoreList.innerHTML=htmlToInject;
};

$ routeProvider

function($routeProvider) {    
  $routeProvider.
    when('/Stores', {
      templateUrl: 'Client_Pages/HTML/Stores.html'
}).

当用户单击STORES菜单时,URL会更改,路由器运行,并将Stores.html页面放入ng-View DIV,然后将更多HTML放入无序列表标记中。无论什么HTML放入UL标签,每次用户导航到另一个页面时似乎都会丢失。

有没有办法让angularjs来维护注入的HTML?

0 个答案:

没有答案