$ http.get中的动态更改网址

时间:2017-04-08 07:39:53

标签: javascript angularjs json http get

我需要使用其他$http.get

中的数据动态更改$http.get中的网址

JSON"数据":

[{ "name" : "John" }, {"name" : "Anna"}]

JavaScript文件:

 var app = angular.module('app', []);
    app.service('service', function($http, $q){
        this.getDatas = function () {
            var datas = $http.get('urldatas', {cache: false});
            return $q.all({datas});
        };
    });
    app.controller('FirstCtrl', function($scope, service, $http) {
        var vm = this;
        vm.loadData = function () {
            var promise = service.getDatas();
            promise.then(function (data) {
                $scope.datas = data.datas.data;
                console.log($scope.datas);
            });
        };
    vm.loadPackages = function () {
      var url = 'url2' + 'QQQ' + $scope.datas.name;

    $http.get(url).then(function (response) {
        $scope.myWelcome = response.data;
        console.log($scope.myWelcome);
            })
        };

HTML:

<table>
    <thead>
        <tr>
            <th>name</th>
        </tr>
    </thead>
    <tbody>
        <tr ng-repeat="name in datas">
            <td>{{name.name}}</td>
            <td><button ng-click="vm.loadPackages()"></button></td>
        </tr>
    </tbody>
</table>

我尝试通过$http.get和HTML中的值动态更改loadPackagesgetDatas中的网址。该按钮调用该函数并将数据提供给网址,但我的代码无效,var url = 'url2' + 'QQQ' + $scope.datas.name;在控制台中返回url2QQQundefindet

提前感谢您的回答。

1 个答案:

答案 0 :(得分:0)

实际上$scope.datas.name是一个数组。你无法像$scope.datas[index].name那样直接访问。如果你知道确切的索引值,那么只需根据索引<table> <thead> <tr> <th>name</th> </tr> </thead> <tbody> <tr ng-repeat="name in datas"> <td>{{name.name}}</td> <td><button ng-click="vm.loadPackages(name)"></button></td> </tr> </tbody> </table> 进行访问。请在下面找到代码段。

在html中,我将各行传递给函数。

 var app = angular.module('app', []);
    app.service('service', function($http, $q){
        this.getDatas = function () {
            var datas = $http.get('urldatas', {cache: false});
            return $q.all({datas});
        };
    });
    app.controller('FirstCtrl', function($scope, service, $http) {
        var vm = this;
        vm.loadData = function () {
            var promise = service.getDatas();
            promise.then(function (data) {
                $scope.datas = data.datas.data;
                console.log($scope.datas);
            });
        };
    vm.loadPackages = function (obj) {
      var url = 'url2' + 'QQQ' + obj.name;

    $http.get(url).then(function (response) {
        $scope.myWelcome = response.data;
        console.log($scope.myWelcome);
            })
        };

然后在控制器中我可以得到名字,

//npm install --save-dev crypto-js
var CryptoJS = require("crypto-js");
var esp8266_msg = 'IqszviDrXw5juapvVrQ2Eh/H3TqBsPkSOYY25hOQzJck+ZWIg2QsgBqYQv6lWHcdOclvVLOSOouk3PmGfIXv//cURM8UBJkKF83fPawwuxg=';
var esp8266_iv  = 'Cqkbb7OxPGoXhk70DjGYjw==';

// The AES encryption/decryption key to be used.
var AESKey = '2B7E151628AED2A6ABF7158809CF4F3C';

var plain_iv =  new Buffer( esp8266_iv , 'base64').toString('hex');
var iv = CryptoJS.enc.Hex.parse( plain_iv );
var key= CryptoJS.enc.Hex.parse( AESKey );

console.log("Let's ");

// Decrypt
var bytes  = CryptoJS.AES.decrypt( esp8266_msg, key , { iv: iv} );
var plaintext = bytes.toString(CryptoJS.enc.Base64);
var decoded_b64msg =  new Buffer(plaintext , 'base64').toString('ascii');
var decoded_msg =     new Buffer( decoded_b64msg , 'base64').toString('ascii');

console.log("Decryptedage: ", decoded_msg);