私はAngularJSでWebアプリケーションを開発しています。私はJavaScriptのリファレンスについて混乱しています。オブジェクトの変更がその参照に影響を与えるのはいつですか?オブジェクトJavaScriptの値とオブジェクト配列
たとえば、私のアプリにはコントローラがあります。私はそのコントローラを使ってファイルをアップロードし、ファイル情報を工場に保存します。
私はファイルオブジェクトをfileArrayにプッシュします。その後、ファイルオブジェクトに新しい属性を変更したり追加したりすると、fileArrayでその変更を見ることができます。
var fileInfo = {
infoArray : $scope.fileArray
}
fileFactory.keepFileInfo(fileInfo);
私はそのアレイを工場で保管します。しかし、$ scope.fileArrayの今回の変更は工場に反映されません。ここでの論理は何ですか?私が間違っていた
EDIT
。コントローラーオブジェクトエフェクトファクトリーの変更。私はこの最小限のアプリケーションを書いてそれをはっきりと見せてくれました。
var testApp = angular.module('testApp', []);
testApp.controller('TestController', function($scope, TestFactory) {
$scope.fileArray = [];
var files = [];
files[0] = {
parameters : {
name : 'file1.txt',
path : "user/files"
}
}
$scope.fileArray.push(files[0]);
files[1] = {
parameters : {
name : 'file2.txt',
path : "user/files"
}
}
$scope.fileArray.push(files[1]);
files[2] = {
parameters : {
name : 'file3.txt',
path : "user/files"
}
}
$scope.fileArray.push(files[2]);
TestFactory.setFileArray($scope.fileArray);
files[0].parameters["name"] = "changed file name";
console.log($scope.fileArray); //here writes "changed file name"
console.log(TestFactory.getFileArray()); //here writes "changed file name", too
});
testApp.factory('TestFactory', function() {
var factory = {};
var fileArray = [];
factory.setFileArray = function(files) {
fileArray = files;
}
factory.getFileArray = function() {
return fileArray;
}
return factory;
});
すべての関連コードを表示してください。工場で$スコープがないのでコントローラで工場配列を共有しているとは思われません – charlietfl