2017-06-20 93 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 
    } 

});