我正在编写一个小的Angular应用程序,它依赖于应用程序外部定义的一些通用函数来跨不同的控制器执行任务。在我的一个控制器中,scope对象是在加载控制器时声明的。我希望能够稍后在我的一个辅助函数中分配它,但是分配不工作。
相关代码如下:
.controller('myCtrl', function($scope, myFactory){
$scope.myObj;
$scope.saveEntry = function() {
myFactory.saveEntry($scope.obj);
formatSingleTableEntry($scope.obj, $scope.myObj);
$scope.obj = {};
}
});
// Entry Formatter
function formatSingleTableEntry(entry, scopeObject) {
if (typeof scopeObject === 'undefined') {
scopeObject = [];
}
if (typeof entry.obsDt === 'string') {
entry.obsDt = dateFormat(entry.obsDt);
}
scopeObject.push(entry);
}
// Date Formatter
function dateFormat(date) {
date = date.split('');
date[10] = 'T';
date = date.join('');
return Date.parse(date);
}
如果我在控制器中将作用域对象赋值为空数组,一切都可以工作,但是在这个配置中赋值不起作用。我可以检查一下赋值是否在辅助函数中发生了,但当我检入控制器时它没有。
为什么?
一个主要问题是,虽然未定义的$scope.myObj;
是一个原语。当你把它作为参数传递给函数时,就不会有对原始变量
var foo;
function test(myVar){
myVar = 'Some string';
// myVar != foo
}
test(foo);
console.log(foo)// undefined
如果原始变量是数组或对象,则传递引用给该数组或对象,从而可以对其进行操作。
简而言之,只声明$scope.myObj =[];
,不要重新分配它,并破坏任何创建的引用