我有一個angularJs應用程序。AngularJS重新加載控制器不要更改DOM
在那裏我有一個「LayoutCtrl」(LayoutController),它說(例如)「有多少目錄菜單鏈接」。
我已經創建了我的控制器和我的服務 - 它工作正常。 現在,在某些情況下,網站需要新的HeadMenu鏈接(例如登錄/註銷)或小部件(小方框帶有額外的內容)。
所以我從LayoutCtrl中獲取$ scope到控制器(稍後抓取並修改其值)。
在測試中(警告一些值),我的$範圍始終是corrent值,也是返回的JSON(來自php服務)的變化。
但DOM不會改變。
它可能是什麼?
佈局的一部分:
<div ng-controller="LayoutCtrl">
<div desc='header' class='header' >
<a desc='hp_link' class='hp_link' href="#{{header.index}}">
<img desc='banner' class='banner' ng-src="{{header.banner}}" src="zkLib/f/img/ajax-loader-sm.gif">
</a>
<div desc='headerRow' class='headerRow'>
<div desc='headerMenu' class='headerMenu'>
<span ng-repeat="m in header.mHead">
<span desc='hmLink' class='hmLink' >
<a desc='headerLink' class='headerLink' href="{{m.link}}">{{m.text}}
<img desc='headerImg' class='headerImg' ng-src="ico/{{m.image}}" heightt="16px;"/>
</a>
</span>
</span>
</div>
<div desc='networksMenu' class='networksMenu'>
<span ng-repeat="n in header.network">
<span desc='nwLink' class='nwLink' >
<a desc='networkLinK' class='networkLinK' target="_blank" title="{{n.name}}" href="{{n.link}}">
<img desc='networkImg' class='networkImg' ng-src="zkLib/f/img/icons/{{n.icon}}"/>
</a>
</span>
</span>
</div>
</div>
</div>
</div>
控制器:
app.controller("LayoutCtrl", ["$scope", "$route",
"HeaderService", "AppService", "WidgetsService", "FooterService",
function($scope, $route, HeaderService, AppService, WidgetsService, FooterService) {
$scope.refresh = function(route) {
HeaderService.query().then(
function(result) { $scope.header = result.data }, function(result) {}
);
WidgetsService.query().then(
function(result) { $scope.widgets = result.data }, function(result) {}
)
$scope.$route = route;
alert(JSON.stringify($scope.header));
};
$scope.refresh($route);
AppService.query().then(
function(result) { $scope.app = result.data }, function(result) {}
);
FooterService.query().then(
function(result) { $scope.footer = result.data }, function(result) {}
);
AppService.$scope = $scope;
}]);
一個被叫服務:
app.factory('HeaderService', ['$http', '$q',
function ($http, $q) {
var service = {};
service.query = function() {
var data = $http.get(sAddr('header'));
var deffered = $q.defer();
deffered.resolve(data);
return deffered.promise;
};
return service;
}]);
(SADDR返回corrent服務器路徑服務)
在其他控制器上(例如索引頁,用戶頁...)我叫
AppService.$scope.refresh($route);
迫使控制器刷新(新菜單新的widget)並正確加載(我認爲) - ?在代碼警報上述打印我了正確的json。
但DOM不會改變。 我做錯了什麼?
從來就建造這種模式與此示例代碼從其他的StackOverflow,問:
從來就建立與Servoce $其他控制器scope.refresh呼叫一個類似的例子。 (TestController) - 它工作得很好......但在這裏 - 沒有區別,沒有。
感謝答案 - 凱
從來就試試吧,但也許我真的不明白它的概念......:/ 我看了你的鏈接和錯誤頁面,同時得到「阿爾雷適用」 - 錯誤,但沒有什麼幫助...我的控制器沒有指令,所以我必須申請和什麼時候? (並且服務通常不知道範圍內的AppService) – Kai