Pertanyaan Konstanta AngularJS


Apakah mungkin untuk menyuntikkan konstan ke konstanta lain dengan AngularJS?

misalnya

var app = angular.module('myApp');

app.constant('foo', { message: "Hello" } );

app.constant('bar', ['foo', function(foo) { 
    return { 
        message: foo.message + ' World!' 
    } 
}]);

Saya perlu penggunaan konstanta sudut karena saya perlu menyuntikkan ini ke dalam konfigurasi rutin. yaitu

app.config(['bar', function(bar) {
    console.log(bar.message);
}]);

Saya tahu bahwa Anda hanya dapat menyuntikkan konstanta dan penyedia ke dalam rutinitas konfigurasi, dan pemahaman saya adalah bahwa Anda dapat melakukan injeksi ketergantungan ke penyedia, namun, tampaknya ini bukan metode terbaik untuk skenario semacam ini ...

Terima kasih sebelumnya atas bantuan Anda!


32
2017-07-18 18:12


asal


Jawaban:


Anda benar, tidak mungkin untuk mendaftarkan baik foo dan bar sebagai konstanta.

Juga untuk menggunakan penyedia sebagai solusi, Anda hampir mendapatkannya dengan benar kecuali bahwa Anda harus menyimpan data dalam contoh penyedia:

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

app.constant('foo', {
    message: 'Hello'
});

app.provider('bar', ['foo', function(foo) {
  this.data = {
    message: foo.message + ' World!'
  };

  this.$get = function() {
    return this.data;
  };
}]);

dan kemudian di blok config, menyuntikkan contoh penyedia bar (bukan contoh bar karena belum tersedia dalam fase config):

app.config(['barProvider', function(barProvider) {
  console.log(barProvider.data.message);
}]);

Semoga ini membantu.


33
2017-07-18 19:08



Sepertinya cara terbaik untuk mendekati ini adalah dengan membuat penyedia kedua yang konstan. yaitu

var app = angular.module('myApp');

app.constant('foo', { message: "Hello" } );

app.provider('bar', ['foo', function(foo) { 
    this.$get = function() { 
        return { 
            message: foo.message + ' World!' 
        };
    } 
}]);

lalu:

app.config(['bar', function(bar) {
    console.log(bar.message);
}]);

2
2017-07-18 18:33



Pendekatan lain adalah menggunakan Ekspresi fungsi yang segera dipanggil untuk menentukan fungsi dan segera memohonnya. Dengan cara ini, ekspresi mengevaluasi dan mengembalikan nilai fungsi, yang dapat terdiri dari dua konstanta.

Ini dapat dicapai menggunakan sesuatu yang mirip dengan ini:

app.constant("foo", (function() {
    var message = 'Hello'
    return {
        foo: message,
        bar: message + " World!"
    }
})());

lalu gunakan konstanta seperti:

console.log("foo: " + foo.foo);
console.log("bar: " + foo.bar);

2
2017-07-18 14:18



Sejauh dokumentasi berjalan: / Panduan / Penyedia Pengembang

Sepertinya itu tidak mendukung sintaks dependensi, itu hanya pasangan nilai kunci, di mana nilai bisa menjadi objek.


0
2017-07-18 18:33



Anda tidak dapat menyuntikkan satu konstanta ke konstanta lain. Sudut tidak memungkinkan itu. Tetapi Anda dapat melakukannya dengan menggunakan layanan seperti di bawah ini

angular.module('myApp', [])
.constant('firstName','John')
.constant('lastName','Smith)
.service('name',function(firstName,lastName)
{ 
  this.fullName = firstName+' '+lastName;
})
.controller('mainCtrl',function($scope,name) {

  $scope.name = name.fullName;

});

Juga untuk addon, jika nilai konstan Anda berubah di masa depan, tidak masuk akal untuk menggunakan konstan karena konstanta hanya siap (Namun javascript tidak mendukung sepenuhnya). Kamu dapat memakai nilai-nilai bukannya konstan yang merupakan fitur lain dalam angularjs yang menghilangkan penggunaan variabel global.


0
2018-03-07 21:35




Inilah cara sederhana untuk membuat dan menggunakan konstanta.

var app = angular.module ("# app_name #", []);

// biarkan defint konstan

app.constant ("constantService", {attr: "ini adalah contant pertama"});

app.controller ("# controller_name #", fungsi ($ scope, constantService) {

console.log (constantService);
console.log (constantService.attr);

})

Buka browser di chrome dan lihat hasilnya di konsol browser.
Berterima kasih kepada Anda.


-3
2017-10-23 10:11