0

我正在尝试获取 user.firstName 和 user.lastName,为这些模型添加一个手表集合,然后吐出一个 userName。

我似乎无法在两者之间进行交流,我认为我使用的范围和自我不正确。我很新,误解了这两个概念。

而且因为我遇到了一个错误,从对象中抓取lastNamefirstName$user对象中吐出一些东西的正确方法是什么?

我正在使用“控制器作为”语法。Ty 提供任何指导。

HTML

<input ng-model="ctrl.user.firstName" required>
<input ng-model="ctrl.user.lastName" required>
<input type="text" value="{{userName}}" name="user_name" ng-model="ctrl.user.userName">

JS

var self = this
$scope.$watchCollection('[user.firstName, user.lastName]', function () {
    if (self.user.firstName != '' && self.user.lastName != '') {
        $scope.userName = self.user.firstName + '_' + self.user.lastName + '_' + Math.floor((Math.random() * 100000) + 1);
        $scope.user.userName.$setViewValue($scope.userName);
    }
});
4

1 回答 1

0

$watchCollection 是针对范围评估的,因此您需要:

var self = this
self.user = {};
$scope.$watchCollection('[ctrl.user.firstName, ctrl.user.lastName]', function () {
    if (self.user.firstName != '' && self.user.lastName != '') {
        $scope.userName = self.user.firstName + '_' + self.user.lastName + '_' + Math.floor((Math.random() * 100000) + 1);
        self.user.userName.$setViewValue($scope.userName);
    }
});

另外,我认为您不必担心使用 $setViewValue,只需更改为:

$scope.$watchCollection('[ctrl.user.firstName, ctrl.user.lastName]', function () {
    if (self.user.firstName != '' && self.user.lastName != '') {
        self.user.userName = self.user.firstName + '_' + self.user.lastName + '_' + Math.floor((Math.random() * 100000) + 1);
    }
});

和你的 html 到:

<input type="text" name="user_name" ng-model="ctrl.user.userName">

仅当您将输入嵌入到表单中时才使用“名称”属性。如果是这种情况,您可以使用

$scope.formName.user_name
于 2015-02-20T01:37:37.947 回答