1. ホーム
  2. angularjs

[解決済み] AngularJsの動的なスコープ変数の設定 - scope.<some_string>

2023-01-19 12:06:39

質問

からの取得した文字列があります。 routeParam やディレクティブ属性などから取得した文字列があり、これに基づいてスコープに変数を作成したいのです。というわけで。

$scope.<the_string> = "something".

しかし、文字列が1つ以上のドットを含んでいる場合、それを分割して実際にスコープに "ドリルダウン" したいです。そこで 'foo.bar' は次のようになります。 $scope.foo.bar . つまり、単純なバージョンでは動作しないのです!

// 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!

文字列を元に変数を読み込む場合、このような動作をさせることができます。 $scope.$eval(the_string) とすることで実現できますが、値を代入する場合はどうすればよいのでしょうか?

どのように解決するのですか?

私が発見した解決策は $parse .

"Angular式を関数に変換します"

もし誰かがより良いものを持っていたら、新しい回答を追加してください!

以下はその例です。

var the_string = 'life.meaning';

// Get the model
var model = $parse(the_string);

// Assigns a value to it
model.assign($scope, 42);

// Apply it to the scope
// $scope.$apply(); <- According to comments, this is no longer needed

console.log($scope.life.meaning);  // logs 42