I'm having trouble getting angular to work with partial .Net postbacks.
The question is basically the same: Re-initialize angular bindings after partial postback
Basically, I have a tab on which I have an angular application, then I have a second tab with some C # control, I need to do partial feedback between the tabs, and when I return to my application, there is nothing.
I tried routing with ngView, then I tried $route.reload() (it goes to the controller and I see that the template is reset, but the result is not on the page). Then I tried compile(templateCache.get(lazyTableControllerRoute.current.templateUrl))(scope) as mentioned here . Nothing.
Please, help:)
After each postback, I put this html on the page:
LiteralControl lazyControl = new LiteralControl("<div ng-app=\"LazyLoadingApp\" style=\"padding:10px\" ng-controller=\"LazyTableController\" ng-view><lazy-table> </lazy-table></div>"); Controls.Add(lazyControl);
And some configuration constants like templateUrl .
Here is my 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 eg $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:
I tried with require.js .. (Again, it works after the page has fully loaded.) My idea was to reload the element after a partial postback. I built a simple test case that in the update panel, along with my application, there is a simple button, just doing a partial postback. After clicking (when the application disappeared) I tried in the console:
angular.bootstrap(document, ['LazyLoadingApp'])
But then I got an error that I cannot remove:
App Already Bootstrapped with this Element 'document'
Here is a plunker for a require.js-style application (but please keep in mind that this is just for checking the code).