AngularJS ng-route 如何在解析时发出http请求

2023-12-06

我有一个简单的模板,带有输入和锚链接,按下它后,将加载另一个模板。我希望第二个模板通过 http 请求获取信息。

我默认使用 ng-route 重定向到搜索模板,并从路径 /search/:title 重定向到结果模板,并且我尝试在加载结果模板之前使用解析来发出请求(plunker 中的代码)

我面临的主要问题是,当我添加解析时,控制器停止初始化(我猜它将在返回承诺后加载)。这意味着当我在控制器搜索功能上打印诸如搜索 URL 之类的变量时,它们未初始化,并且 $routeParams 为空。

我该怎么做?

我也不确定解析的正确语法。第一次搜索是范围变量吗?

resolve: {
    search: searchController.search 
}

对于那些懒得检查 Plunker 的人,这里是相关代码:

Routing

.config(['$routeProvider',function($routeProvider) {
    $routeProvider.
      when('/search', {
        templateUrl: 'templates/search.html'
      }).
      when('/search/:title', {
        templateUrl: 'templates/result.html',
        controller: 'searchController', 
        resolve: {
            search: searchController.search
        }
      }).
      otherwise({
        redirectTo: '/search'
      });
  }]); 

搜索控制器

var searchController = search.controller('searchController', ["$http", "$scope", "$location", '$rootScope', '$routeParams', function($http, $scope, $location, $rootScope, $routeParams) {
    console.log("Controller constructor");
    this.searchURL = 'http://www.myapifilms.com/imdb?title=%thetitle%&format=JSON';
    $scope.response = '<Response here>';
    this.title = '';
    this.defer = null;
    console.log("PARAMS: " + JSON.stringify($routeParams));
    }]);

    searchController.search = function searchMovie($q, $routeParams) {
        searchController.defer = $q.defer;

        var searchString = $routeParams.title;
        url = searchController.searchURL.replace('%thetitle%', searchString);
        console.log("URL: " + url);
        searchController.searchRequest(url);
    };

    searchController.searchRequest = function(url) {
        $http.get(url).success(function(data) {
            ....
            searchController.defer.resolve(); 
            return searchController.defer.promise;
        })
        .error(function(data, status, headers, config) {
            ...
            searchController.defer.resolve(); 
            return searchController.defer.promise;
        })
    };

我认为你应该使用 .factory 创建一个服务并进行相应的编辑:

angular.module('myApp', ['ionic', 'ngRoute', 'starter', 'wc.Directives'])

.run(function($ionicPlatform) {
  $ionicPlatform.ready(function() {
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
    // for form inputs)
    if (window.cordova && window.cordova.plugins.Keyboard) {
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
    }
    if (window.StatusBar) {
      StatusBar.styleDefault();
    }
  })
})

.factory("search", function($q, $http){
    return {
        getMessage: function(){
            //return $q.when("Response");
            var promise = $http({ method: 'GET', url: 'your_url'}).success(function(data, status, headers, config) {
                 return data;
             });
             return promise;
        }
    };
})

.config(['$routeProvider',
  function($routeProvider) {
    $routeProvider.
    when('/search', {
      templateUrl: 'search.html'
    }).
    when('/search/:title', {
      templateUrl: 'result.html',
      controller: 'searchController',
      /*resolve: {
        search: searchController.search
      }*/
      resolve: {
            search: function(search){
                return search.getMessage();
        }
      }
    }).
    otherwise({
      redirectTo: '/search'
    });
  }
]);

你的笨蛋分叉了:http://plnkr.co/edit/Ry4LAl?p=preview

我希望你得到了你想要的,在你帮助别人完成后分享你的坏东西。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AngularJS ng-route 如何在解析时发出http请求 的相关文章

随机推荐

  • 减去 Pandas 或 Pyspark Dataframe 中的连续列

    我想在 pandas 或 pyspark 数据框中执行以下操作 但我仍然没有找到解决方案 我想从数据框中的连续列中减去值 我所描述的操作如下图所示 请记住 输出数据帧的第一列不会有任何值 因为输入表中的第一列不能被其前一列减去 因为它不存在
  • 如何使用 gfortran-10 构建 MPICH?

    TL DR 如何使用 gfortran 10 gcc 10 和 g 10 构建 MPICH 背景 我想用 grortran 10 构建 MPICH以便能够使用最新的 MPI 绑定 但我还没能做到 尝试在 Ubuntu 上通过 apt 安装
  • 是否有相当于“az rest”的PowerShell?

    我最近发现了az rest命令 它允许我执行经过身份验证的 REST 命令 而不必担心获取令牌 https www codeisahighway com native azure rest api calls now available i
  • Google OAuth Android 的重定向 url

    从未真正使用过 OAuth 现在尝试实现它 我想从 google 和 facebook 获取访问令牌和配置文件数据 使用 Xamarin Auth 使用 Facebook 没有问题 我指定 http www facebook com con
  • boost图形库定向多图edge_range错误

    我有一个有向多重图 其顶点为 A C 边为 E1 E4 A E1 gt B A E2 gt B A E3 gt B B E4 gt C 我想迭代连接 A 和 B 的边 在 BGL 中 我将其表达为 include
  • 将整数拆分为数字的最快方法是什么?

    我做了很多操作 将数字分割成单独的数字 将数字放入 ArrayList 中 并将这些数字一个接一个地传递到其他 ArrayList 进行进一步操作 直到 tempList 为空 然后进入下一个比前一个更大的数字 我想知道哪种方法更快 两种方
  • PHP SimpleXML 中的 XML 到 JSON 转换

    data
  • PHP 图片上传检查尺寸

    图片上传后如何查看尺寸 如果它与我想要的尺寸不符 请将其删除吗 因此 经过深入研究 我发现 PHP 无法处理维度 我遵循的解决方案是 将文件上传到服务器 使用新字符串并检查 如果有则删除或继续上传 宽度和高度不匹配 这是我的代码 有人可以告
  • 如何在 ASP.NET 中返回图像作为响应

    我如何将 http 处理程序响应投射到图像 我创建了一个处理程序 如下所示 它在图像中进行一些操作 var absolutePath context Server MapPath imagePath var originalImage Im
  • 如何从url加载UIImage?

    我有以下问题 致命错误 在解包可选值时意外发现 nil IBOutlet weak var DetailImageView1 UIImageView IBOutlet weak var DetailLabel UILabel IBOutle
  • 您只在输出上运行 htmlspecialchars() 还是还执行其他功能?

    输出用户输入时 是否只使用htmlspecialchars 或者您还运行哪些函数 操作 方法 我正在寻找也能处理 XSS 的东西 我想知道是否应该编写一个在输出上转义用户输入的函数 或者只是使用htmlspecialchars 我正在寻找一
  • 为什么我无法使用子类的指针访问基类的公共函数?

    我不知道为什么我收到 错误 C2660 SubClass Data 函数不接受 2 个参数 当我尝试编译我的项目时 我有一个带有名为 data 的函数的基类 该函数采用一个参数 Data 的重载采用 2 个参数 在我的子类中 我重写了带有
  • 应用因“缺少推送通知权利”而被拒绝

    最近我的申请在上传时被拒绝了 Apple 审核团队称我的应用程序 缺少推送通知权利 这是他们提供的信息 缺少推送通知权利 您的应用程序向 Apple 推送通知服务注册 但应用程序签名的权利不包括所需的 aps environment 权利
  • 更新单个ListView Item文本时如何防止ListView闪烁?

    我想要的只是更新 ListViewItem 文本而不看到任何闪烁 这是我的更新代码 多次调用 listView BeginUpdate listViewItem SubItems 0 Text state ToString update t
  • NetBeans 8.2 突然无法在 Mac 上运行/打开

    我正在使用 Netbeans v8 2 编写一个项目 突然它关闭了 当我重新打开它时 我看到了附加的屏幕 即使我可以在那里看到它们 我也无法打开任何项目 并且大多数选项现在呈灰色 请任何人帮忙 我运行MAC操作系统 请有人告诉我到底如何恢复
  • 向服务发送自定义 WCF 消息

    我的目标是记录对一个 IIS 托管的 wcf 服务的 wcf 调用 并将它们重播到不同的 wcf 服务 到目前为止我有一个IDispatchMessageInspector工作关 注这个例子 它可以记录传入的请求和相应的回复到磁盘 如何从磁
  • 将 C 语言转换为 PHP 的 CRC16 函数

    我需要帮助将 C 代码转换为 PHP 以下是C代码 static const U16 crctab16 0x0000 0x1189 U16 GetCrc16 const U8 pData int nLength U16 fcs 0xffff
  • 我的 BIOS 设置中没有启用 Hyper-V 的选项

    我是 Windows Phone 8 应用程序开发新手 我安装了SDK 8 0 当我运行应用程序时 它显示一条错误 告诉我启用 Hyper V 在搜索过程中我发现这个 MSDN 文档BIOS 中有解决方案 但是当进入我的BIOS设置时 却没
  • docker容器启动后运行命令

    我准备了一个 docker compose 文件来部署带有数据库的容器 services tmp db image microsoft mssql server linux latest environment ACCEPT EULA Y
  • AngularJS ng-route 如何在解析时发出http请求

    我有一个简单的模板 带有输入和锚链接 按下它后 将加载另一个模板 我希望第二个模板通过 http 请求获取信息 我默认使用 ng route 重定向到搜索模板 并从路径 search title 重定向到结果模板 并且我尝试在加载结果模板之