2014-12-31 8 views
10

मैं एप्लिकेशन बना रहा हूं जो सीओआरएस अनुरोधों का उपयोग करता है।एंजुलर ऐप शुरू होने से पहले .json फ़ाइल से कुछ सेटिंग लोड करना संभव है

angular.module('siteApp').factory('DocsSvc', function ($http, baseUrl) { 
    var baseurl = baseUrl.server ; 
    $http.get(baseurl + 'document') 

बनाने के लिए यह संभव है 'htttp: // स्थानीय होस्ट /' मूल्य प्रत्येक अनुरोध मैं एक निरंतर

angular.module('siteApp').constant('baseUrl', { 
'server':'htttp://localhost/', 
}) 

से और प्रत्येक सेवा मैं इस तरह का अनुरोध भेजने के लिए उपयोग में मेजबान पता मिल का उपयोग - config.json फ़ाइल से baseUrl निरंतर या baseUrl कारखाने में आया था? मेरा मतलब है: मैं कैसे ajax अनुरोध से कुछ लोड एक यह एप्लिकेशन मॉड्यूल

मैं कोशिश की है के लिए सुलभ बनाना कर सकते हैं:

.run(['$rootScope', , function ($rootScope) { 

    $.ajax('config.json', {async: false}) 
    .success(function (data) { 
    $rootScope.HOST = data.HOST; 
    }); 

और baseurl से उस तक पहुंच की कोशिश की:

angular.module('siteApp').factory('baseUrl',function($rootScope) { 
return { 
    server: $rootScope.HOST 

लेकिन कोई भाग्य नहीं - baseUrl.server कार्यों में अपरिभाषित आता है

उत्तर

7

आप कोणीय के run विधि का उपयोग कर सकते हैं।

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

    app.run(function($http, $rootScope){ 
    $http.get('config.json') 
    .success(function(data, status, headers, config) { 
    $rootScope.config = data; 
    $rootScope.$broadcast('config-loaded'); 
    }) 
    .error(function(data, status, headers, config) { 
    // log error 
    alert('error'); 
    }); 
}) 

app.controller('MainCtrl', function($scope, $rootScope) { 
    $scope.$on('config-loaded', function(){ 
    $scope.name = $rootScope.config.name; 
    }); 
}); 

इस plunker

+0

कृपया अद्यतन प्रश्न देखें: मैंने ऐसा कुछ करने का प्रयास किया था, लेकिन सफलता के बिना – happyZZR1400

+0

अद्यतन उत्तर और प्लंकर देखें। यह काम करता है :) – vinesh

+1

आपको कॉन्फ़िगरेशन-लोडेड ईवेंट केवल उन नियंत्रकों के लिए सुनना होगा जो प्रारंभ में लोड किए गए हैं। क्योंकि इस मामले में नियंत्रक को जेसन फ़ाइल लोड होने से पहले बुलाया जा रहा है। – vinesh

1

तुम भी कोणीय एप्लिकेशन शुरू होने से पहले यह करने के लिए चाहते हैं, आप के बजाय एनजी-ऐप के निर्देश का उपयोग करने का, बूटस्ट्रैप फ़ंक्शन का उपयोग कर सकते हैं।

से: $apply() इसकी एक गैर कोणीय अतुल्यकालिक के बाद की जरूरत है

.run(['$rootScope', function ($rootScope) { 

    $.ajax('config.json', {async: false}) 
    .success(function (data) { 
    $rootScope.HOST = data.HOST; 
    $rootScope.$apply();   // New line 
    }); 
}]) 

कि: https://docs.angularjs.org/api/ng/function/angular.bootstrap

<!doctype html> 
<html> 
<body> 
<div ng-controller="WelcomeController"> 
    {{greeting}} 
</div> 

<script src="angular.js"></script> 
<script> 
    var app = angular.module('demo', []) 
    .controller('WelcomeController', function($scope) { 
     $scope.greeting = 'Welcome!'; 
    }); 
    // Do your loading of JSON here 
    angular.bootstrap(document, ['demo']); 
</script> 
</body> 
</html> 
1

आप डेटा परिवर्तन के बारे में कोणीय कहता हूं, इसलिए इस तरह अपने कोड कुछ संशोधित करने की आवश्यकता कहते हैं।

संबंधित मुद्दे