范围变量未随ng更改更新-angularjs

范围变量未随ng更改更新-angularjs,angularjs,Angularjs,这似乎是一个简单的问题,但很难解决。 有一个分页组件,它有一个按钮和一个下拉列表。用户可以通过单击按钮或在下拉列表中选择页码来转到页面 问题是,当我在下拉列表中选择一个值时,什么都不会发生。因为范围变量与前一个变量没有变化 aspx: <div data-ng-app="app" data-ng-controller="ReportsCtrl"> <div id="paging-top"> <div> <ul>

这似乎是一个简单的问题,但很难解决。 有一个分页组件,它有一个按钮和一个下拉列表。用户可以通过单击按钮或在下拉列表中选择页码来转到页面

问题是,当我在下拉列表中选择一个值时,什么都不会发生。因为范围变量与前一个变量没有变化

aspx:

<div data-ng-app="app" data-ng-controller="ReportsCtrl">
<div id="paging-top">                
 <div>
   <ul>         
     <li>
       <select data-ng-model="SelectedPage" data-ng-change="ShowSelectedPage();" 
        data-ng-options="num for num in PageNumbers track by num">
       </select>
     </li>
     <li data-ng-click="ShowNextPage();"><a href="#">Next</a></li>         
   </ul>
  </div>
</div>
ReportsCtrl.js

var app = angular.module("app", ["ngRoute"]);
app.controller("ReportsCtrl", ["$scope","ReportsFactory",function ($scope,ReportsFactory) {

init();
var init = function () { 
  $scope.ShowReport(1);
}

$scope.ShowReport = function (pageNumber) {
  GetUserResponsesReport(pageNumber);
} 

function GetUserResponsesReport(pageNumber) {

    $scope.UserResponsesReport = [];        
    var promise = ReportsFactory.GetReport();
    promise.then(function (success) {
        if (success.data != null && success.data != '') {                
            $scope.UserResponsesReport = success.data;                
            BindPageNumbers(50, pageNumber);
        }            
    });        
}

function BindPageNumbers(totalRows, selectedPage) {        
    $scope.PageNumbers = [];
    for (var i = 1; i <= 5 ; i++) {
        $scope.PageNumbers.push(i);
    }
    $scope.SelectedPage = selectedPage;        
}

$scope.ShowSelectedPage = function () {
    alert($scope.SelectedPage);
    $scope.ShowReport($scope.SelectedPage);
}

 $scope.ShowNextPage = function () {        
    $scope.SelectedPage = $scope.SelectedPage + 1;
    $scope.ShowReport($scope.SelectedPage);        
}   
}]);
app.controller(“ReportsCtrl”、[“$scope”、“ReportsFactory”、函数($scope、ReportsFactory){
init();
var init=函数(){
$scope.ShowReport(1);
}
$scope.ShowReport=函数(页码){
GetUserResponseReport(页码);
} 
函数GetUserResponseReport(页码){
$scope.userresponseReport=[];
var promise=ReportsFactory.GetReport();
承诺。然后(功能(成功){
如果(success.data!=null&&success.data!=''){
$scope.UserResponsesReport=success.data;
绑定页码(50,页码);
}            
});        
}
函数BindPageNumber(totalRows,selectedPage){
$scope.PageNumbers=[];

对于(var i=1;i和您的OPSelectedPage,它只是基本变量

每个角度指令都会创建新的范围。

因此,更改下拉列表后,SelectedPage不会在ng repeat范围外更新,即在作为控制器的父范围内更新。 为此,使用对象变量代替原始数据类型,因为它通过具有相同内存位置的引用更新值



尝试以这种方式在控制器中定义SelectedPage对象

$scope.objSelectedPage = {SelectedPage:''};
在HTML中

<select data-ng-model="objSelectedPage.SelectedPage" data-ng-change="ShowSelectedPage();"

你打算问多少次同样的问题?很抱歉。发布整个代码会使文章变得冗长,新编辑在一段时间后没有得到任何回应。长期以来一直在与此问题斗争。因此,再次尝试创建一个更简单/几乎完整的代码。谢谢你的帮助。我不明白为什么
$scope.SelectedPage
没有使用
ng change
进行更新,但是这个小技巧奏效了。-将值作为参数
data ng change=“ShowSelectedPage(SelectedPage);
发送到控制器-
$scope.ShowSelectedPage=function(val){$scope.SelectedPage=val;}
好吧,如果这个问题的答案实际上是解决方案的关键,那么我怀疑您正落入JavaScript原型继承的陷阱。这是一个多么伟大的洞察!谢谢!
 $scope.ShowSelectedPage = function () {

    console.log($scope.objSelectedPage.SelectedPage);
    $scope.ShowReport($scope.objSelectedPage.SelectedPage);

}