Angularjs ng-include neu laden

Las ich mehrere Beiträge zu diesem Thema, bin aber immer noch keine Daten geladen werden per ng-include neu laden, nachdem zunächst geladen wird, von einem remote-Daten-server.

(Beispiel Wie die reload - /refresh-Modell-Daten aus dem server programmgesteuert? )

Ich habe eine GSP-Seite, das macht eine pull-down-Menü von Optionen, und wenn eine ausgewählt wird, ng-include ruft eine remote-server und zeigt die Daten (in einer ng-Netz). Also die ng-include muss der vollständige Pfad an den remote-server in der URL. Dieser code funktioniert einwandfrei, die ersten mal eine option verwendet wird, wird aber nicht von re-load der Daten auf die nachfolgende Auswahl. Ich verstehe, dass Angularjs ist das Zwischenspeichern der Daten, aber ich brauche es zu zwingen, neu geladen. Gibt es ein Ereignis, dass ich fangen kann inside "myTabController" zu erzwingen, rufen Sie die ng-include? Ist es möglich, den cache auszuschalten? Da es nicht möglich ist, Argumente übergeben von Angularjs in der URL der ng-include, diese Parameter gesendet werden über AJAX-Aufrufe, die in einem anderen Abschnitt, so dass der Daten-server hat bereits die Parameter vor dem ng-include-Antrag gestellt wird.

_myTabs.Aps

<div ng-controller= "myTabController" ng-init="init(${selIds})">
<select name="tabSelect" ng-model= "tab" ng-options="t.name for t in tabs"></select>
<form name="tabForm">
  <div ng-switch="tab.value">
    <div ng-switch-when="optionA"<div ng-include="'https://datasrv:8453/DataApp/dataCtrl/aData'" ><div></div>
    <div ng-switch-when="optionB"<div ng-include="'https://datasrv:8453/DataApp/dataCtrl/bData'" ><div></div>
    <div ng-switch-when="optionC"<div ng-include="'https://datasrv:8453/DataApp/dataCtrl/cData'" ><div></div>
  </div>
</form>
</div>

myTabs.js

angular.module('myApp', ['ui.grid', 'ui.grid.resizeColumns', 'ngAnimate', 'ngRoute']);
app.controller("myTabController", function($scope, $interval, $filter, $window, $http, $rootScope, uiGridConstants){
$scope.tabs = {
  { name: '--- Please Select an Option ---', value: ' '},
  { name: 'A Label', value: 'optionA'},
  { name: 'B Label', value: 'optionB'},
  { name: 'C Label', value: 'optionC'}
 ];
}]);

Bearbeiten:
Aus den Antworten auf meine Frage scheint es, dass der Aufruf $templateCache.removeAll() könnte dieses problem lösen. Ich kann nur hinzufügen, ein onload="xx ()", um die ng-include, und eine Funktion, die myTabController:

$scope.xx = function(){
  $templateCache.removeAll();
}

aber natürlich, es sagt mir, dass $templateCache ist nicht definiert. Also habe ich versucht dies in einen run-block:

$scope.xx = function(){
  app.run( function( $templateCache ){  
    $templateCache.removeAll();
  });
}

Dies nicht ein Fehler generiert, aber es hat nicht alles tun. Die Funktion xx() aufgerufen wurde, aber es wurde nicht aufrufen $templateCache.removeAll(). Was bin ich?


Bearbeiten 2.

Ich versucht, mit einer Richtlinie zu generieren, die ng-include-tag:

    <div ng-switch-when="optionA"<div mydir ng-attr-path="https://datasrv:8453/DataApp/dataCtrl/aData" ><div></div>

In der Richtlinie habe ich versucht, indem eine Zufallszahl an die URL um die es einzigartig machen:

.directive('mydir', ['$compile', function($compile){
  restrict: 'A',
  template: function( elem, attr ){
    var r = Math.random()
    var rpath = attr.path + '/?r=' + r
    return "<div ng-include=\"'" + rpath + "'\" onload=\""xx('" + rpath + "')\"></div>"; 
  }
};

Leider machte dies keinen Unterschied machen. Es Tat erzeugen die ng-include-richtig, einschließlich die zufällige Zeichenfolge am Ende. Es erscheint noch einmal die Daten, aber die URL wurde nicht neu generiert, die bei nachfolgenden aufrufen. Die xx () - Funktion aufgerufen wurde, jedes mal, wenn es geladen wurde, aber.

Der Schlüssel ist, um irgendwie Kraft dieser Richtlinie werden jedes mal aufgerufen, wenn der Menüpunkt ausgewählt, so wird die Zufallszahl erneut aufgerufen, um die änderung der URL. Oder verwenden Sie die xx () - Funktion den cache zu löschen. Aber wie?


Edit 3:
Ich sehe, dass es Probleme mit der übergabe von Werten mithilfe von "{{val}}" notation in einer Richtlinie in der URL für eine ng-include. Referenz: ändern ng-include-Direktive

  • IDK wenn das Ihre Frage beantwortet, aber es ist eine Eigenschaft, die auf $http erlaubt, dass Sie sagen, es nicht cache bestimmte Dinge. docs.angularjs.org/api/ng/service/$http Aus dem obigen link: cache – {boolean|Cache} – Wenn true, wird ein Standard - $http-cache wird verwendet, um cache in der GET-Anfrage, ansonsten, wenn eine cache-Instanz gebaut, die mit $cacheFactory, wird dieser cache für die Zwischenspeicherung verwendet werden. Weiter, könnte es besser sein, für Sie zu setzen, dass in einer Richtlinie zu haben, mehr feinkörnige Kontrolle darüber, wie das ganze funktioniert eher als die Verwendung von ng-include.
  • Danke, das sieht vielversprechend aus, ich sehe, dass $http übergeben wird in myTabController, aber sein mir nicht klar, wie es zu benutzen. Vielleicht $http.Standardwerte.cache = false; ? Ich werde es versuchen ...
  • Oder auf Ihre Anfrage etwas wie das hier tun: $http.get('/api/users.json', { cache: true }).success(function(data){...}).error(function(data){...}) Dass gesagt wird, es klingt wie Sie sind noch ziemlich früh in Ihrem lernen von Angularjs. Je nach Anforderungsprofil und was nicht, wenn das nur ein persönliches Projekt, möchten Sie vielleicht zu schauen, mit Winkel 2, die ließ offiziell seine beta gestern.
  • Also einfach hinzufügen $http.Standardwerte.cache = false; in myTabController nicht scheinen, etwas zu tun. Entschuldigen Sie meine Unwissenheit, Angularjs, ich bin mit gerade GSP. Ich bin nicht sicher, wie Sie zu verwenden " $http.Holen Sie sich in diesem Fall. Eine Sache, die ich nicht erwähnt habe, ist, dass die remote-URL, dass die an die ng-include ist eigentlich erzeugt durch die Aps.
  • Haben Sie versucht, anfügen einer ? und der aktuelle timestamp an die url, z.B. https://datasrv:8453/DataApp/dataCtrl/bData?23453453456? Das hilft Zerschlagung Zwischenspeichern.
  • Das würde funktionieren, wenn ich könnte, re-Generierung der URL, aber leider ist die URL, die generiert wird, indem Sie eine GSP-tag auf der _myTabs.gsp-Ansicht. So kann ich nicht verwenden, Angularjs, es zu ändern.
  • Johannes, ich habe versucht, mit Hilfe einer Richtlinie hinzufügen, um eine zufällige Zeichenfolge am Ende der URL, wie oben im Edit#2, aber es machte keinen Unterschied. Es wird nur generiert, die tag einmal.

InformationsquelleAutor J21042 | 2015-12-17
Schreibe einen Kommentar