无法删除Javascript对象并在angular js作用域中创建新实例
我在创建JavaScript对象的新副本并分配给无法删除Javascript对象并在angular js作用域中创建新实例,javascript,angularjs,Javascript,Angularjs,我在创建JavaScript对象的新副本并分配给$scope时遇到了一个奇怪的问题。此对象绑定到前端窗体,因此我必须重置此对象的数据。代码如下: 这是JavaScript类: var userInfo = (function () { function userInfo() {} var _refCode = ""; var _country = {}; var _language = {}; var _userType = 0; var _retailer = {};
$scope
时遇到了一个奇怪的问题。此对象绑定到前端窗体,因此我必须重置此对象的数据。代码如下:
这是JavaScript类:
var userInfo = (function () {
function userInfo() {}
var _refCode = "";
var _country = {};
var _language = {};
var _userType = 0;
var _retailer = {};
userInfo.prototype.data = {
refCode: function (value) {
return angular.isDefined(value)
? (_refCode = value)
: _refCode;
},
country: function (value) {
return angular.isDefined(value)
? (_country = value)
: _country;
},
language: function (value) {
return angular.isDefined(value)
? (_language = value)
: _language;
},
userType: function (value) {
return angular.isDefined(value)
? (_userType = value)
: _userType;
},
retailer: function (value) {
return angular.isDefined(value)
? (_retailer = value)
: _retailer;
}
}
return userInfo;
})();
这是我的角度控制器:
app.controller('MainController', function ($scope, $http, $state) {
$scope.initUserInfo = function () {
//here make instance of the class
var user_info = new userInfo();
delete $scope.userInfo;
$scope.userInfo = user_info;
};
$scope.initUserInfo();
});
但是当我调用函数initUserInfo()
时,什么都没有发生。$scope.userInfo
中的数据仍然存在。我做错了什么?如何从userInfo
中删除信息
更新:
谢谢,我做了更改,现在我的代码看起来像,但是当我
console.log
我有以下错误:
无法在第一个控制台上读取未定义的属性“数据”。log
在第二个控制台上打印旧值。日志
打印旧值-在第三个控制台上。日志
А在执行此功能后,在她执行此功能之前,该功能仍然未被删除
$scope.initUserInfo = function () {
delete $scope.userInfo;
var user_info = null;
console.log("after delete: " + $scope.userInfo.data.refCode());//first console log
user_info = new userInfo();
$scope.userInfo = user_info;
console.log("after assing: " + $scope.userInfo.data.refCode());
$scope.userInfo.data.createdStore(new addStoreData());
$scope.userInfo.merge(verifiedEmployee);
$scope.verifiedEmployee = verifiedEmployee;
console.log($scope.userInfo.data.refCode());
};
嗯,在我看来,一切都正常运转。 将在由
new userInfo()
构造的每个对象中设置data
属性。因为您在prototype
中设置了此属性
下面是您的代码的作用:
- 1) 创建
的新实例,并将其保存在userInfo()
中。现在user\u info
具有user\u info
属性data
- 2) 您可以删除
对象的属性$scope
,不管它是什么。现在,userInfo
是$scope.userInfo
。但是原始函数未定义的
仍然存在,因为您没有删除它。另外,您实际上不能使用userInfo
关键字删除它,因为您使用delete
关键字创建了它(因此它变得不可配置)。更多关于var
- 3) 将
对象的$scope
属性重新分配给先前创建(当然仍然存在)的userInfo
,它是源user\u info
的一个实例,具有userInfo
属性。现在,数据
具有数据属性$scope.userInfo
$scope.userInfo
中的信息,那么您做得对:删除$scope.userInfo
。如果要删除originuserInfo
函数中的信息,可以这样做,例如:userInfo=null
下面是您的代码。为什么不使用类似$scope.userInfo={}???@ManuelObregozo的东西并尝试了它,但没有成功地注意到$scope.apply()函数@GProst我做了一些更改,这是我的最终代码,但问题没有解决。