2017-01-09 33 views
1

我創建JavaScript對象的新副本並將其分配到$scope有一個奇怪的問題。該對象綁定到前端窗體,所以我必須重置此對象的數據。下面是代碼: 這是JavaScript類:無法刪除Javascript對象,並在角度js範圍內創建新實例

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刪除信息?

UPDATE:

謝謝,我做出改變,現在我的代碼的樣子,但是當我

console.log

我有以下錯誤:

Cannot read property 'data' of undefined - on the first console.log

print old value - on second console.log

print old value - on third console.log

Аfter的執行她表演前的這個功能仍然沒有被抹去。

$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()); 
    }; 
+2

爲什麼不能像$ scope.userInfo = {}? –

+0

@ManuelObregozo並嘗試過,但沒有成功 –

回答

1

那麼,在我看來,一切正常,因爲它應該。 data屬性將設置在由new userInfo()構造的每個對象中。因爲您在prototype中設置了此屬性。

所以,這裏是你的代碼做什麼:

  • 1)創建您在user_info保存的userInfo()新實例。現在user_infodata屬性。
  • 2)刪除$scope對象的屬性userInfo,無論它是什麼。現在$scope.userInfoundefined。但原點功能userInfo仍然存在,因爲您沒有刪除它。另外,您實際上無法使用delete關鍵字將其刪除,因爲您使用var關鍵字創建了它(儘管它變得不可配置)。更多關於delete operator
  • 3)重新分配屬性對象的$scopeuserInfo到先前創建(和仍然存在課程)user_info,這是起源userInfo的一個實例,具有data財產。所以現在$scope.userInfo有數據屬性。

總共,如果你想刪除$scope.userInfo中的信息,那麼你做得對:delete $scope.userInfo。如果你想刪除原來的功能userInfo的信息,你可以這樣做,例如:userInfo = null

這是plunker與您的代碼。

+0

添加要注意$ scope.apply()函數! – Marco

+0

@GProst我做了一些更改,這是我的最終代碼,但問題沒有解決。 –