Ich habe ein Problem, eckigen Arbeiten mit. Net teilweise Postbacks bekommen.Angular Template und .NET Partial Postback
Frage ist im Grunde dieselbe dazu: Re-initialize Angular bindings after partial postback
Grundsätzlich habe ich eine Lasche auf dem ich Winkel app, dann bin ich mit einer C# Steuer zweiten Register aufweisen, I partielle Postback zwischen Registerkarten zu tun haben, und wenn ich zurück zu meiner App geht, gibt es nichts.
Ich habe versucht Routing mit ngView dann habe ich versucht $route.reload()
(es geht an den Controller, und ich kann sehen, dass die Vorlage heruntergezogen wird, aber das Ergebnis auf der Seite ist keine). Dann versuchte ich compile(templateCache.get(lazyTableControllerRoute.current.templateUrl))(scope)
wie erwähnt here. Nichts.
Bitte helfen :)
Nach jedem Postbacks ich auf Seite bin setzen Sie diesen HTML:
LiteralControl lazyControl = new LiteralControl("<div ng-app=\"LazyLoadingApp\" style=\"padding:10px\" ng-controller=\"LazyTableController\" ng-view><lazy-table> </lazy-table></div>");
Controls.Add(lazyControl);
Und einige Config-Konstanten wie templateUrl
.
Hier ist mein Code:
var app = angular.module('LazyLoadingApp', ['ui.bootstrap', 'ngRoute'], function ($interpolateProvider) {
$interpolateProvider.startSymbol('[[');
$interpolateProvider.endSymbol(']]');
});
app.config(function ($routeProvider, $locationProvider, tableTemplateUrl) {
$routeProvider.when('/Page.Web.UI/sptl_project.aspx', {
controller: 'LazyTableController',
templateUrl: tableTemplateUrl,
});
// configure html5 to get links working on jsfiddle
$locationProvider.html5Mode(true);
});
//**This objects I am using after partial postback to check in the console if e.g. $route.reload() works..**
var lazyTableControllerRoute = null;
var templateCache = null;
var compile = null;
var scope = null;
app.directive('lazyTable', ['tableTemplateUrl',
function (tableTemplateUrl) {
return {
name: 'lazyTable',
priority: 0,
restrict: 'E', // E = Element, A = Attribute, C = Class, M = Comment
templateUrl: tableTemplateUrl
};
}
]).controller('LazyTableController', ['$scope', '$rootScope', 'lazyFactory', 'opsPerRequest', 'header', '$route', '$templateCache', '$compile',
function ($scope, $rootScope, lazyFactory, opsPerRequest, header, $route, $templateCache, $compile) {
lazyTableControllerRoute = $route;
var loadingPromise = null;
templateCache = $templateCache;
compile = $compile;
scope = $scope;
(...) rest is not important
UPDATE:
ich mit require.js versucht wurde .. (Wieder ist es nach dem vollständigen Laden der Seite zu arbeiten.) Meine Idee Element Bootstrap war nach teilweisem Postback. Ich baute einfachen Testfall, dass im Update-Panel zusammen mit meiner App gibt es einfache Schaltfläche, nur teilweise Postback. halten
App Already Bootstrapped with this Element 'document'
Hier ist plunker für App in require.js Art und Weise (aber bitte: Nach dem Klick (wenn App verschwunden) Ich habe versucht, in der Konsole:
angular.bootstrap(document, ['LazyLoadingApp'])
Aber dann bekam ich Fehler, die ich nicht entfernen bedenken Sie, dass es nur für Code Überprüfung Zweck ist ..)
Vielen Dank für Ihre Antwort. Ich verwende es nicht zusammen, als ich "require.js way" versuchte, entfernte ich ng-app tag. –
Wie wird LazyControl verwendet? warum es ng-app enthält? –
Sie können hier sehen, dass lazycontrol ng-app enthält, weil das mein erster Ansatz war - normales eckiges Injizieren. Bitte verbinden Sie den Code über "UPDATE" nicht mit update selbst, da ich einige Änderungen für require.js vorgenommen habe - wie das Entfernen von ng-app von der Seite und das Hinzufügen von ngview .. –