Angularjs $scope未更新-控制器规范

Angularjs $scope未更新-控制器规范,angularjs,angularjs-scope,Angularjs,Angularjs Scope,我的路线如下: app.config(['$routeProvider', function ($routeProvider) { $routeProvider. when('/panel', { templateUrl: 'views/panel.html' }). when('/make', { templateUrl: 'view

我的路线如下:

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模板指定控制器时,我的$scope变量不再在视图中更新

当我拿出一个特定路由的控制器规范时,事情就会恢复正常

控制器“userCtrl”通过$location访问,面向普通用户。反过来,“Ctrl面板”是分配给管理员用户的主控制器


有人能告诉我发生了什么事吗?

我没有所有的信息,但它在我的演示中起作用

配置

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>
{{hello}

我为这件事感到抱歉。我相信页面在同一个控制器中,我永远不会错过参考:

When ('/panel', {
                 TemplateUrl: 'views/panel.html',
    Controller: 'panelCtrl'
             }).
             When ('/make', {
                 TemplateUrl: 'views/makePanel.html',
            Controller: 'panelCtrl'
             }). cotinue...
事实上,views panel.html和makePanel.html将使用相同的控制器结构,但是每个视图都有一个实例(变量将被重置)。 在我的例子中,我使用工厂函数来解决这个问题。每次禁用控制器时,我都通过set()存储感兴趣的信息,并通过get()获取它


当路由发生更改时,是否正在初始化范围变量?你能不能制作一个复制眼睛的演示。默认情况下,所有变量都使用空值初始化。应用程序已经非常复杂,我不知道是否可以在演示中重现这个问题。奇怪的是,在控制器“alarmCtrl”的情况下,一切都很顺利。我不明白为什么其他控制器不工作。变量值通过AJAX调用更新。我可以通过console.log()看到这一点,但视图中没有反映出这一点。我理解您觉得代码很复杂,但您应该提供,我将尝试在一个小示例代码中重现这种效果。请给我几分钟……我的朋友,我的结论是重现这个问题会很复杂。仅使用一个控制器,一切都可以正常工作,但这是不切实际的。你能不能制作一个简短的视频并提供给大家,这样你就可以看一看了?我发现了这个问题。当我这样做时:TemplateUrl:'views/panelUser.html',Controller:'userCtrl'将重新初始化“userCtrl”中存在的所有变量,并丢失对其内容的引用。解决方案是以某种方式保存$scope变量的上下文。你知道怎么做吗?也许是服务或工厂。。。您需要一个示例。当您更改页面时,控制器将重置。对于存储数据,您可以选择。数据库、工厂/服务或会话存储/本地存储。创建init函数并在内部调用您的需要。函数init(){…}init();朋友,看看我贴的答案,这就解决了我的问题。谢谢你的帮助。
app.factory("MonitorService", function () {
    var info;
    function set(data) {
        info = data;
    }
    function get() {
        return info;
    }
    return {
        set: set,
        get: get
    }

});