Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 从下拉列表中获取旧值和新值_Angularjs_Ng Repeat_Ng Options - Fatal编程技术网

Angularjs 从下拉列表中获取旧值和新值

Angularjs 从下拉列表中获取旧值和新值,angularjs,ng-repeat,ng-options,Angularjs,Ng Repeat,Ng Options,我试图简单地从下拉列表中获取上一个值和新选择的值。在本例中,下拉列表预先填充了分配给用户的当前组 更改下拉列表时,我希望能够返回旧值和新值。我已经可以得到旧值,但我不知道如何返回新值 控制器代码: // User Object userAccess = [{"user_name":"dodsosr11", "group_level":1, "user_id":500, "group_id"

我试图简单地从下拉列表中获取上一个值和新选择的值。在本例中,下拉列表预先填充了分配给用户的当前组

更改下拉列表时,我希望能够返回旧值和新值。我已经可以得到旧值,但我不知道如何返回新值

控制器代码:

// User Object
userAccess = [{"user_name":"dodsosr11",
                  "group_level":1,
                  "user_id":500,
                  "group_id":10,
                  "group_name":"Conferences_Admins"},
              {"user_name":"keatikj09",
                  "group_level":1,
                  "user_id":250,
                  "group_id":10,
                  "group_name":"Conferences_Admins"},
              {"user_name":"malinag10",
                  "group_level":1,
                  "user_id":492,
                  "group_id":10,
                  "group_name":"Conferences_Admins"}];

//Group Object
groupAccess = [{"group_name":"Conferences_Admins",
                   "id":10,
                   "level_id":1},
               {"group_name":"ticket_sales",
                   "id":59,
                   "level_id":3},
               {"group_name":"Web Developers",
                   "id":1,
                   "level_id":1}];


$scope.reassignUser = function(){
    var oldGroup = this.user.group_id;
    var newGroup = ?????

};
HTML:


{{user.user_name}
我使用下面第一个响应中提供的手表示例创建了一个小提琴

这样做:

$scope.$watch('user.group_name', function(newValue, oldValue){

});

无需再使用
ng change
您可以使用ng click,因为click发生在更改之前,您可以像这样注册旧值

<select ng-model="selected" ng-change="change(selected, oldValue)" ng-click="oldValue = selected">
像这样试试

查看

<select ng-model="selected" ng-change="change(selected, {{selected}})">

如果我在其中抛出警报以显示oldValue和newValue,则在呈现表时会触发警报-但当我实际更改下拉列表时,不会触发警报,尽管在其他地方我可以看到user.group\u名称已更新。@Photovor这是因为您有ng repeat。然后,您应该在
userAccess
@Photovor中监视每个
用户
,例如,
$scope.$watch('user[0].group_name',…
将监视第一个用户的
group_name
属性如果我这样做,在表呈现并显示第一个警报后,我会收到一个错误:error:[$rootScope:inprog]我也不知道要观看多少用户,因为它是完全可变的。这只在使用单个输入/选择字段时有用。您也不应该使用
ng click
,因为如果您选择输入文本而不是在输入字段内单击,则不会触发此事件。相反,您应该使用
ng focus
!…如果您hange to
ng change=“change(selected,{{selected | | null'}}})”
,angular不会抱怨如果最初没有设置selected,因为当它没有设置时,angular会尝试执行
change(selected,)
,这会导致js错误并停止代码执行这是一个很好的解决方案,但我不明白它为什么会工作。{}在对象更改发生之前传递文本?
$scope.change = function(newValue, oldValue){
    //do if's in case you use null or empty values
    if ( oldValue ) {
        //do something
    }   
    if ( newValue ) {
        //do something
    }
}
<select ng-model="selected" ng-change="change(selected, {{selected}})">
$scope.change = function(newObj, oldObj){
   console.log(newObj);
   console.log(oldObj);
}