Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法删除Javascript对象并在angular js作用域中创建新实例_Javascript_Angularjs - Fatal编程技术网

无法删除Javascript对象并在angular js作用域中创建新实例

无法删除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 = {};

我在创建JavaScript对象的新副本并分配给
$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
。如果要删除origin
userInfo
函数中的信息,可以这样做,例如:
userInfo=null


下面是您的代码。

为什么不使用类似$scope.userInfo={}???@ManuelObregozo的东西并尝试了它,但没有成功地注意到$scope.apply()函数@GProst我做了一些更改,这是我的最终代码,但问题没有解决。