angularJS模板网址未自动加载

时间:2014-04-24 16:53:48

标签: javascript ajax angularjs angularjs-routing ng-view

  1. 我在输入type="search"中输入字符时加载。
  2. Page两次调用'ajax call'。请求在“单击”或“onPageload”
  3. 上触发两次

    的index.html

    这是我的html文件,其中有一个搜索框

    <div>
        <div class="input-group">
            <input type="search" class="form-control search" ng-model="searchtag" tabindex="1">
            <div class="input-group-btn">
                <button class="btn btn-default" type="submit" ng-click="search()"></button>
            </div>
            <ng-view></ng-view>
        </div>
    

    这个搜索框没有附上,为什么这么傻了呢?

    模板网址正在此ng-view

    中加载

    index.js文件:

    这里我已经为模板URL定义了路由配置。

    angular.module("myApp", ['ngRoute'])
        .config(["$routeProvider", function($routeProvider) {
            $routeProvider.
                when("/", { templateUrl: "pic.html" }).
                when("/Search", { templateUrl: "pic.html" }).
                when("/VipList", { templateUrl: "cust.html" }).
                otherwise({ redirectTo: "/", templateUrl: "pic.html" });
        }]
        )
    

    这里我创建了一个服务,该服务将ajax调用发送到服务器并返回一个json对象。在每个请求上调用两次ajax调用并返回两个'Json'数据对象。

    .factory('Search', [function($http, $scope) {
        return {
            fetchPopular: function($scope, callback) {
    
                $.ajax({
                    type: "POST",
                    url: 'Search',
                    data: {search : $scope.globeSearch},
                    dataType: 'json'
                }).
                    success(function(data, status, headers, config) {
                        console.log(data);
                        if(data.data.length<=0){
                            alert("No data found");
                        }
                        callback(data.data);
                    })
                    .error(function(data, status, headers, config) {
                    });
            }
        };
    }
    ])
    
    .controller("fetch", function($scope, $interval, $location, Search) {
    
        $scope.globeSearch="Sachin";
    
        $scope.pics = [];
        $scope.have = [];
        $scope.orderBy = "-comments.count";
        $scope.getMore = function(callback) {
            Search.fetchPopular($scope, function(data) {
    
                for(var i=0; i<data.length; i++) {
                    if (typeof $scope.have[data[i].id]==="undefined") {
                        $scope.pics.push(data[i]) ;
                        $scope.have[data[i].id] = "1";
                    }
                }
                $location.path("/Search");
            });
        };
    
    
        $scope.getMore();
    
        $scope.searchPopular = function(callback) {
    
            if($scope.searchStr!=null && $scope.searchStr!=""){ $scope.globeSearch=$scope.searchStr; }
    
            $scope.pics = [];
            $scope.have = [];
            $scope.orderBy = "-comments.count";
            Search.fetchPopular($scope, function(data) {
                for(var i=0; i<data.length; i++) {
                    if (typeof $scope.have[data[i].id]==="undefined") {
                        $scope.pics.push(data[i]) ;
                        $scope.have[data[i].id] = "1";
                    }
                }
                $location.path("/Search");
            });
        };
    

1 个答案:

答案 0 :(得分:2)

我很难理解你在这里做了什么,但我至少可以看到一些问题。

我没有看到控制器的代码,也没有看到任何模板。为了使您的路由工作,应用程序的路由需要更改(理想情况下在应用程序的控制器内)。例如,如果在您调用$location.path('/Search')的控制器内,angular会加载相关模板并调用控制器。

如果您不介意在PlunkerJSFiddle上进行实时演示,我相信您可以获得更有意义的帮助。

修改

我看到了你最大的问题。让我们再看一下您的路由配置。

angular.module("myApp", ['ngRoute'])
    .config(["$routeProvider", function($routeProvider) {
        $routeProvider.
            when("/", { templateUrl: "pic.html" }).
            when("/Search", { templateUrl: "pic.html" }).
            when("/VipList", { templateUrl: "cust.html" }).
            otherwise({ redirectTo: "/", templateUrl: "pic.html" });
    }]
    )

您未在路线中指定任何控制器。为了执行搜索代码,您需要在子控制器中调用Search工厂。此外,您的第一条路线在otherwise()来电时是多余的。

从AngularJS文档中获取的Plunker可以帮助您。