gpt4 book ai didi

javascript - 在 Angular 应用程序外部分配范围对象

转载 作者:行者123 更新时间:2023-12-03 08:42:53 25 4
gpt4 key购买 nike

我正在编写一个小型 Angular 应用程序,它依赖于应用程序外部定义的一些常见函数来跨不同 Controller 执行任务。在我的一个 Controller 中,加载 Controller 时声明作用域对象。我希望稍后能够在我的一个辅助函数中分配它,但分配不起作用。

相关代码如下:

.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);
}

如果我将范围对象分配为 Controller 中的空数组,则一切正常,但在此配置中分配不起作用。我可以检查分配实际上发生在辅助函数中,但是当我检查 Controller 时它没有发生。

为什么?

最佳答案

一个主要问题是未定义的 $scope.myObj; 是一个原语。当您将其作为参数传递给函数时,不会再引用原始变量

var foo;

function test(myVar){
myVar = 'Some string';
// myVar != foo
}

test(foo);
console.log(foo)// undefined

如果原始变量是数组或对象,您可以将引用传递给该数组或对象,从而可以对其进行操作。

简而言之,只需声明 $scope.myObj =[]; 并且不要重新分配它并破坏创建的任何引用

关于javascript - 在 Angular 应用程序外部分配范围对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33003656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com