Saya memiliki string yang saya dapatkan dari routeParam
atau atribut direktif atau apa pun, dan saya ingin membuat variabel pada ruang lingkup berdasarkan ini. Begitu:
$scope.<the_string> = "something".
Namun, jika string berisi satu atau beberapa titik, saya ingin membaginya dan benar-benar "menelusuri" ke dalam cakupan. Jadi 'foo.bar'
seharusnya menjadi $scope.foo.bar
. Artinya, versi sederhana tidak akan berfungsi!
// This will not work as assigning variables like this will not "drill down"
// It will assign to a variables named the exact string, dots and all.
var the_string = 'life.meaning';
$scope[the_string] = 42;
console.log($scope.life.meaning); // <-- Nope! This is undefined.
console.log($scope['life.meaning']); // <-- It is in here instead!
Saat membaca variabel berdasarkan string, Anda bisa mendapatkan perilaku ini dengan melakukan $scope.$eval(the_string)
, tetapi bagaimana melakukannya saat menetapkan nilai?
Menggunakan jawaban Erik, sebagai titik awal. Saya menemukan solusi yang lebih sederhana yang berhasil untuk saya.
Dalam fungsi ng-click saya, saya memiliki:
Saya telah mengujinya dengan dan tanpa $ scope. $ Apply. Bekerja dengan benar tanpanya!
sumber
Buat variabel sudut dinamis dari hasil
sumber
Jika Anda tidak masalah menggunakan Lodash, Anda dapat melakukan hal yang Anda inginkan dalam satu baris menggunakan _.set ():
https://lodash.com/docs#set
Jadi contoh Anda adalah:
_.set($scope, the_string, something);
sumber
Hanya untuk menambahkan jawaban yang telah diberikan, berikut ini berhasil untuk saya:
HTML:
Dimana
$index
indeks loop.Javascript (di mana
value
parameter yang diteruskan ke fungsi dan itu akan menjadi nilai$index
, indeks loop saat ini):sumber
Harap diingat: ini hanyalah JavaScript dan tidak ada hubungannya dengan Angular JS. Jadi jangan bingung tentang tanda '$' ajaib;)
Masalah utamanya adalah ini adalah struktur hierarki.
Ini tidak ditentukan karena "$ scope.life" tidak ada tetapi istilah di atas ingin memecahkan "arti".
Solusi seharusnya
atau dengan sedikit usaha lagi.
Karena Anda dapat mengakses objek struktural dengan
Ada beberapa tutorial bagus tentang ini yang memandu Anda dengan baik melalui kesenangan dengan JavaScript.
Ada sesuatu tentang
Pergi dan cari web untuk 'angular $ apply' dan Anda akan menemukan informasi tentang fungsi $ apply. Dan Anda harus menggunakan lebih bijak dengan cara ini (jika Anda tidak alreay dengan fase $ apply).
sumber
Jika Anda menggunakan pustaka Lodash di bawah ini adalah cara untuk menyetel variabel dinamis dalam lingkup sudut.
sumber
Jika Anda mencoba melakukan apa yang saya bayangkan Anda coba lakukan, maka Anda hanya perlu memperlakukan scope seperti objek JS biasa.
Inilah yang saya gunakan untuk respons sukses API untuk larik data JSON ...
Sekarang {{subject}} akan mengembalikan larik nama subjek data, dan dalam contoh saya akan ada atribut cakupan untuk {{jobs}}, {{customers}}, {{staff}}, dll. Dari $ scope. pekerjaan, $ scope.customers, $ scope.staff
sumber