使用factory对象初始化angular js中的scope对象值



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

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
}

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

您在不复制的情况下分配对象

$scope.user = userFactory.userInitailValues;

对象将在分配期间保留引用。

如果一侧发生变化,另一侧将自动发生变化。

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

试试这个

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

只初始化一次值。然后$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/

相关内容

  • 没有找到相关文章

最新更新