2017-06-20 20 views
0

は、私は次のルーティングを持っていない:私は特定のHTMLテンプレート用のコントローラを指定すると

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', 

      }); 
    }]); 

、私の$スコープ変数は、もはやビューで更新されます。

特定のルートのコントローラ仕様を引き出すと、通常の状態に戻ります。

コントローラー 'userCtrl'は$ locationからアクセスされ、通常のユーザー向けです。次に、「Ctrlパネル」は、管理ユーザーに割り当てられたプライマリコントローラです。

何が起こっているのか教えてもらえますか?

+0

ルートが変更されたときにスコープ変数を初期化していますか?問題を複製するデモを作成できますか? – Manish

+0

はい。デフォルトでは、すべての変数はNULL値で初期化されます。アプリケーションはすでに非常に複雑なので、デモで問題を再現できるかどうかはわかりません。 奇妙なことに、コントローラ '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', 

      }); 
    }]); 

定義:私はFごめんなさい

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

問題を特定できました。 ときには: TemplateUrl: 'views/panelUser.html'、 コントローラ: 'userCtrl' 角度は、 'userCtrl'にあるすべての変数を再初期化し、その内容の参照を失います。解決策は、$ scope変数のコンテキストを何らかの方法で保存することです。 これを行う方法が分かりますか?たぶんサービスや工場...あなたは例が必要でしょう。 –

+0

ページを変更すると、コントローラはリセットされます。あなたのデータを保存するには選択肢があります。データベース、工場/サービス、またはsessionStorage/localStorage。 init関数を作成し、必要に応じて呼び出します。関数init(){...} init(); – nevradub

+0

友達、私が投稿した答えを見て、私の問題を解決しました。 ご協力いただきありがとうございます。 –

0

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

HTMLまたはigenuidade。

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

は実際には、ビューはpanel.htmlとmakePanel.htmlは、同じコントローラの構造を使用します、しかし、我々は1つのインスタンスのがあります:私は、同じコントローラにあるページは、私が言及を逃したことがないと信じていました各ビュー(変数はリセットされます)。 私の場合は、問題を解決するためにファクトリ関数を使用しました。私がコントローラをミュートするたびに、set()を使って関心のある情報を保存し、get()で取得します。

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

});