2016-01-12 95 views
0

我已經在我的項目中創建一個工廠如下初始化範圍對象的值,使用工廠對象的角度JS

app.factory('userFactory', userFactory); 

function userFactory() { 
var userInitialValueSettings = { 
    UserId: '', 
    FullName: '', 
    Location: '', 
    Phone: '', 
    Ext: '', 
    Fax: '', 
    Email: '', 
    IsExternalUser: false, 
    Password: '', 
    UserMustChangePassword: false, 
    PasswordNeverExpires: false 
} 

return { 
    userInitailValues: userInitialValueSettings 
} 
} 

我用工廠的userInitialValues對象初始化我的範圍對象之一,因爲如下。

$scope.user = userFactory.userInitailValues; 

我使用$ scope.user的屬性作爲一些輸入文本框的模型。我的表單中有一個清晰的按鈕。我需要清除文本框,同時點擊清除按鈕。所以我在清除按鈕點擊鉤住以下功能。

$scope.cancelAddUserDialoge = function() { 
    $scope.user = userFactory.userInitailValues; 
} 

但是文本字段沒有被清除。什麼是問題?有誰能夠幫助我?如果我在清除按鈕中使用以下方法單擊並單獨清除每個模型屬性,則文本框將被清除。

function ResetUserModel() { 
    $scope.user.UserId= '', 
    $scope.user.FullName = '', 
    $scope.user.Location = '', 
    $scope.user.Phone = '', 
    $scope.user.Ext = '', 
    $scope.user.Fax = '' 
    $scope.user.Email = '', 
    $scope.user.IsExternalUser = false, 
    $scope.user.Password = '', 
    $scope.user.UserMustChangePassword =false, 
    $scope.user.PasswordNeverExpires =false 
} 

爲什麼我不能使用工廠對象來清除模型?請幫幫我。

回答

1

你不復制它

$scope.user = userFactory.userInitailValues; 

對象分配期間將保持基準assiging對象。

如果一方改變,另一方會自動改變。

所以當你沒有使用副本分配,你在表格中更改也將在userInitailValues更改。最終你在$scope.user中重新分配$scope.user

嘗試這樣

$scope.user = angular.copy(userFactory.userInitailValues); 
+3

可能會更好使'userFactory.userInitialValues'函數返回一個副本,那麼調用者沒有t o永遠記得在使用前複製。 – Duncan

+0

謝謝您的回覆。我已經嘗試過了。但它沒有奏效。我發現,它是2路更新。所以我按照你的建議使用了angular.copy。它在加載時在初始化中工作。但一個清除按鈕單擊文本字段不明確。 –

+0

@ NOBLEM.O。你可以做一個小提琴並給我提供鏈接嗎? –

1

您初始化值只有一次。然後$scope.user鏈接到這些值,並直接更改這些值。我建議你創建初始數據未來的方式:在您

app.factory('userFactory', userFactory); 

function userFactory() { 

    return { 
     init : function() { 
     return { 
      UserId: '', 
      FullName: '', 
      Location: '', 
      Phone: '', 
      Ext: '', 
      Fax: '', 
      Email: '', 
      IsExternalUser: false, 
      Password: '', 
      UserMustChangePassword: false, 
      PasswordNeverExpires: false 
     }; 
     } 
    }; 
} 

然後控制器初始化數據

$scope.user = userFactory.init(); 

和復位

$scope.cancelAddUserDialoge = function() { 
    $scope.user = userFactory.init(); 
} 

這裏固定小提琴http://jsfiddle.net/takf64v6/

+0

謝謝。它工作。 –