2015-05-18 14 views
9

Mam następujący select listę:angularjs przekazać zmienną do fabryki

<select name="make" class="form-control" ng-model="selectCity"> 
    <option value="Kannur">Kannur</option> 
    <option value="Agra">Agra</option> 
    <option value="Ahemedabad">Ahemedabad</option> 
    <option value="Bangalore">Bangalore</option> 
    <option value="Chennai">Chennai</option> 
    <option value="Mumbai">Mumbai</option> 
</select> 

Kiedy zmienić wybraną opcję muszę zdać ng-model, selectCity w fabryce, która wywołuje API:

fabryka:

carPriceApp.factory('APIservices', function($http){ 

    APIcarModels = {}; 
    APIcarModels.getAPIcarModels = function(){ 
     return $http.get('/carprices3/api/apiData'+ selectCity +'.js') 
    } 
    return APIcarModels; 

}); 
+1

możliwe duplikat [Przełęcz zmiennej na angularjs fabryczne] (http://stackoverflow.com/questions/16800891/pass-variable-to-factory-angularjs) –

+0

Skąd pochodzi usługa selectCity? Czy nie musisz traktować tego jako argumentu? –

+0

@YuujinLee It from Hunter

Odpowiedz

11

Rozwiązałem twój problem, napisz tutaj html

<div ng-controller="myCtrl"> 
    <select ng-change="changeCity()" name="make" class="form-control" ng-model="selectCity"> 
    <option value="Kannur">Kannur</option> 
    <option value="Agra">Agra</option> 
    <option value="Ahemedabad">Ahemedabad</option> 
    <option value="Bangalore">Bangalore</option> 
    <option value="Chennai">Chennai</option> 
    <option value="Mumbai">Mumbai</option> 
    </select> 
</div> 

i javascript tutaj

var app = angular.module('myApp', []); 
app.factory('APIservices', function($http) { 
    var APIcarModels = {}; 
    APIcarModels.getAPIcarModels = function(selectCity) { 
    alert(selectCity); 
    return $http.get('/carprices3/api/apiData'+ selectCity +'.js') 
    } 
    return APIcarModels; 

}); 

function myCtrl($scope, APIservices) { 
    $scope.changeCity = function() { 
    APIservices.getAPIcarModels($scope.selectCity); 
    }; 

} 

Praca przykładem Here

+0

Czy mogę zadać inne pytanie? Jak mogę przekazać $ routeParams jako argument do fabryki? – Hunter

+0

Jeśli podobają ci się moje odpowiedzi, oddaj głos. – vamsikrishnamannem

+1

Zrobiłem Bro ..... – Hunter

2

Możesz użyć ng-change Właściwość na liście wyboru i stamtąd zadzwoń do swojego API. Trzeba także wziąć parametr w funkcji getAPIcarModels:

znaczników byłoby jak:

<select name="make" class="form-control" ng-model="selectCity" ng-change="selectMake()"> 

A w kontrolerze:

$scope.selectMake = selectMake() { 
    APIservices.getAPIcarModels($scope.selectCity); 
} 

i wreszcie swojej fabryce:

APIcarModels.getAPIcarModels = function(selectCity){ 
    return $http.get('/carprices3/api/apiData'+ selectCity +'.js') 
} 
1

trzeba dodać coś ng-change="changeCity(selectCity)"

Patrz poniżej artykułach na przykład i więcej informacji

http://plnkr.co/edit/0IVNLHiw3jpz4zMKcB0P?p=preview 
http://stackoverflow.com/questions/26485346/how-do-i-get-the-ng-model-of-a-select-tag-to-get-the-initially-selected-option  
http://stackoverflow.com/questions/25935869/id-as-ng-model-for-select-in-angularjs 
0

alternatywnie używając ng-options:

zobacz:

<div ng-app='App' ng-controller="AppCtrl"> 
    <select ng-model="selectedCity" ng-options="city.name for city in cities"> 
</select> 
    Selected City is {{selectedCity.name}} 
</div> 

JS:

angular.module('App', []) 
.controller('AppCtrl', function($scope) { 

    $scope.cities = [ 
     {name: 'Chicago'}, 
     {name: 'London'} 
    ]; 
    $scope.selectedCity = ''; 
}); 

pracy przykład: https://jsfiddle.net/pz9f093e/

Powiązane problemy