2014-02-21 54 views
0

我有一個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,問:

enter link description here

從來就建立與Servoce $其他控制器scope.refresh呼叫一個類似的例子。 (TestController) - 它工作得很好......但在這裏 - 沒有區別,沒有。

感謝答案 - 凱

回答

0

您嘗試$ $範圍適用於()或$ rootScope $摘要()來獲取所有DOM中的刷新數據。從控制器外部更新任何模型將更新數據,但Angular不知道它。有時候,使用$ scope來設置手錶。$ watch和更新控制器內的值會爲您提供DOM中刷新的數據。

嘗試一個$ scope。$ digest()在您的承諾的末尾也是一個選項。

http://nathanleclaire.com/blog/2014/01/31/banging-your-head-against-an-angularjs-issue-try-this/

+0

從來就試試吧,但也許我真的不明白它的概念......:/ 我看了你的鏈接和錯誤頁面,同時得到「阿爾雷適用」 - 錯誤,但沒有什麼幫助...我的控制器沒有指令,所以我必須申請和什麼時候? (並且服務通常不知道範圍內的AppService) – Kai

相關問題