2017-06-20 108 views
0

我有以下路徑:

app.config(['$routeProvider', 

    function ($routeProvider) { 
     $routeProvider. 
      when('/panel', { 
       templateUrl: 'views/panel.html' 
      }). 
      when('/make', { 
       templateUrl: 'views/makePanel.html', 
       controller: 'painelCtrl' 
      }). 
      when('/paneluser', { 

       templateUrl: 'views/panelUser.html', 
       controller: 'userCtrl' 

      }). 
      when('/paneluserblocks', { 
       templateUrl: 'views/userPanels.html', 
       controller: 'userCtrl' 
      }). 
      when('/registred', { 

       templateUrl: 'views/registredPanels.html' 
      }). 
      when('/color', { 

       templateUrl: 'views/color.html', 
       controller: 'alarmCtrl' 
      }). 
      otherwise('/', { 
       templateUrl: 'Index.html', 

      }); 
    }]); 

當我指定一個特定的HTML模板控制器,我的$範圍內的變量在視圖中不再更新。

當我拿出特定路線的控制器規格時,情況會恢復正常。

控制器'userCtrl'通過$ location訪問,適用於普通用戶。反過來,'Ctrl面板'是分配給管理員用戶的主控制器。

誰能告訴我發生了什麼事?

+0

當你的路線被改變時,你是否正在初始化你的範圍變量?你能否創建一個複製問題的演示 – Manish

+0

是的。默認情況下,所有變量都用空值初始化。該應用程序已經非常複雜,我不知道是否可以在演示中重現問題。 奇怪的是,在控制器'alarmCtrl'的情況下,一切都很好。我不明白爲什麼其他控制器不工作。 變量值通過AJAX調用進行更新。我可以通過console.log()看到這一點,但是這並不反映在視圖中。 –

+0

我知道你覺得你的代碼很複雜,但你應該真的提供[一個最小,完整和可驗證的例子](https://stackoverflow.com/help/mcve) –

回答

1

我還沒有所有的信息,但它在我的演示中工作。

配置

var app = angular.module('app',['ngRoute']); 
app.config(['$routeProvider', 

    function ($routeProvider) { 
     $routeProvider. 
      when('/panel', { 
       templateUrl: 'views/panel.html' 
      }). 
      when('/make', { 
       templateUrl: 'views/makePanel.html', 
       controller: 'painelCtrl' 
      }). 
      otherwise('/', { 
       templateUrl: 'Index.html', 

      }); 
    }]); 

控制器的定義:

app.controller('painelCtrl',painelCtrl); 
painelCtrl.$inject = ['$scope'] //and more if you need $http, services, ... 
function painelCtrl($scope){ 
    $scope.hello= "hello world" 
} 

HTML

<h1>{{hello}}</h1> 
+0

我能夠發現問題。 當我這樣做: TemplateUrl:'views/panelUser.html', 控制器:'userCtrl' 角度重新初始化'userCtrl'中存在的所有變量,並丟失其內容的引用。解決方案是以某種方式保存$ scope變量的上下文。 你知道該怎麼做?也許服務或工廠...你需要一個例子。 –

+0

當你改變頁面時,控制器被重置。爲了存儲您的數據,您可以選擇。數據庫,工廠/服務或sessionStorage/localStorage。創建init函數並在裏面調用你的需要。函數init(){...} init(); – nevradub

+0

朋友,看看我發佈的答案,並解決了我的問題。 感謝您的幫助。 –

0

對不起˚F或igenuidade。我認爲,在同一個控制器作爲網頁,我絕不會錯過參考:

When ('/panel', { 
       TemplateUrl: 'views/panel.html', 
    Controller: 'panelCtrl' 
      }). 
      When ('/make', { 
       TemplateUrl: 'views/makePanel.html', 
      Controller: 'panelCtrl' 
      }). cotinue... 

事實上,意見panel.html和makePanel.html將使用相同的控制器結構,但是我們將有一個實例每個視圖(變量將被重置)。 在我的情況下,我使用工廠功能來解決問題。每次我將控制器靜音時,我通過set()存儲感興趣的信息,並通過get()獲取它;

app.factory("MonitorService", function() { 
    var info; 
    function set(data) { 
     info = data; 
    } 
    function get() { 
     return info; 
    } 
    return { 
     set: set, 
     get: get 
    } 

});