【问题标题】:One controller, two views - stop original controller from reloading一个控制器,两个视图 - 阻止原始控制器重新加载
【发布时间】:2014-01-21 11:23:33
【问题描述】:

我有一个 ng-click 调用 $scope.get_post_Range 来返回一系列数据库查询。问题是完成后,我原来的控制器主功能再次运行('post_View_Ctrl')。这将返回整个数据库集合。我该如何阻止这个?奇怪的是,如果我再次点击链接,它运行的是函数而不是原来的主控制器。

var blogAppViewController = angular.module ('blogAppViewController', []);

blogAppViewController.controller('post_View_Ctrl', function ($scope, $http, $routeParams, $location) {
    $scope._idList=[];
    var globalPAGECount=0;

    $http.get('/allposts').success(function(input_data) {
        $scope.posts = input_data;
        var posts_Length=$scope.posts.length;
        $scope.post1=input_data[0];
        $scope.post2=input_data[1];
        $scope.post3=input_data[2];
        $scope.post4=input_data[3];
        $scope.post5=input_data[4];

        $scope._idList.push({"Page":1, "_id":$scope.posts[0]._id});
        var count=0;
        var PageCount=2;
        for (var each in $scope.posts){
            count++;
            if (count==5){
                $scope._idList.push({"Page": PageCount, "_id": $scope.posts[each]._id});
                count=0;
                PageCount++;
            }
        }
            $scope._idList.push({"Page": PageCount, "_id":$scope.posts[posts_Length-1]._id});
            var listLength = $scope._idList.length;
            // console.log($scope._idList[listLength-1]);
            if($scope._idList[listLength-1]._id == $scope._idList[listLength-2]._id ){
                $scope._idList.pop();
            }
            console.log($scope._idList);

        $scope.a=globalPAGECount+1;
        $scope.a_id=$scope._idList[globalPAGECount]['_id'];

        $scope.b=globalPAGECount+2;
        $scope.b_id=$scope._idList[globalPAGECount+1]['_id'];

        $scope.c=globalPAGECount+3;
        $scope.c_id=$scope._idList[globalPAGECount+2]['_id'];

        $scope.d=globalPAGECount+4;
        $scope.d_id=$scope._idList[globalPAGECount+3]['_id'];

        $scope.e=globalPAGECount+5;
        $scope.e_id=$scope._idList[globalPAGECount+4]['_id'];

    });

    $scope.get_post_Range = function(high,low) {

        console.log(high, low);
        console.log("At least enters here");
        $http.get('/get_posts/high/' + high + '/low/' + low).success(function (returned) {
            $scope.posts = returned;
            console.log("success");
        });
    };

    $scope.selectSearch = function(input) {
        $scope.Search1 = input;
        if ($scope.Search1 == 'Title'){
            $scope.searchTitle = true;
            $scope.searchContent = false;

            $scope.search_Hits=null;
        }
        if ($scope.Search1 == 'Post Content'){
            $scope.searchTitle = false;
            $scope.searchContent = true;
            $scope.search_Hits=null;
        }
    };

    $scope.searchDatabase = function(type, input) {
        if (type === 'Title') {
            $http.post('/search_post_Titles', {title: input}).success(function (response) {
                $scope.search_Hits = response;
            });
        }
        if (type === 'Post Content') {
            $http.post('/search_post_Content', {post: input}).success( function (response) {
                $scope.search_Hits = response;
            });
        }
    };

});

/////////// ///////////

var blogApp = angular.module('blogApp', [
    'ngRoute',
    'ngResource',
    'blogAppViewController',
    'blogSingleViewController',
    'blognewEntryController',
    ]);

    blogApp.config(['$routeProvider', 
        function ($routeProvider) {
            $routeProvider.
                when('/' , {
                    templateUrl: 'partials/all-posts.html',
                    controller: 'post_View_Ctrl'
                }).
                when('/post/:title' , {
                    templateUrl: 'partials/single-post.html',
                    controller: 'single_View_Ctrl'
                }).
                when('/get_posts/high/:high/low/:low' , {
                    templateUrl: 'partials/all-posts.html',
                    controller: 'post_View_Ctrl'
                }).
                when('/new_entry' , {
                    templateUrl: 'partials/new_Entry.html',
                    controller: 'entry_View_Ctrl'
                }).
                otherwise({
                    redirectTo: '/'
                });
            }]);

【问题讨论】:

  • 当使用查询字符串将 URL 加载到浏览器中时 - 进行刷新不会导致控制器重新加载
  • 这解决了我的问题 - stackoverflow.com/questions/15472655/… 为什么运行主控制器对我来说仍然没有意义。该路由指向我的自定义高/低 api。

标签: angularjs rest


【解决方案1】:

控制器设计为每次导航更改仅执行一次,因此这里没有明显的理由执行两次。

也许您在 $routeProvider 级别(如您所示)和 html 级别(请参阅this question)声明控制器

如果它没有解决问题,这里将需要一个 plunker。

【讨论】:

  • 我遇到了这个问题,我曾一度将其从 html 中删除。
  • 不是这个问题,但它确实修复了控制器加载两次
  • 所以你需要添加一个 plunker 或者 JSFiddle
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-17
  • 2015-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多