使用工厂对象初始化角度js中的范围对象值

时间:2016-01-12 09:41:03

标签: angularjs

我在我的项目中创建了一个工厂,如下所示,

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
}

为什么我不能使用工厂对象来清除模型?请帮帮我。

2 个答案:

答案 0 :(得分:1)

您正在分配对象而不复制它

$scope.user = userFactory.userInitailValues;

对象将在分配期间保持参考。

如果更改了一侧,则另一侧将自动更改。

因此,当您在不使用副本的情况下进行分配时,您在表单中的更改也会在userInitailValues中进行更改。最终,您要在$scope.user中重新分配$scope.user

试试这个

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

答案 1 :(得分: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/