AngularJs:我有选择的droplist,只在更改时调用一次函数。如何更改时,如何调用该函数?

时间:2017-05-22 12:44:19

标签: javascript angularjs

我有一个选择的下拉列表选项,填充国家/地区形成我的数据库,我希望成功选择国家/或更改以调用一个函数,该函数根据所选国家/地区ng-change指令检索区域。到目前为止,可以在select drop-list选项控件中检索和填充这些国家。 现在:我似乎无法理解的是我的指令只执行一次并根据所选选项返回区域但如果我重复或更改国家而不刷新浏览器我会得到 TypeError:v2.MyregionFunction不是函数。 MyregionFUnction引用我调用的方法来检索名称为 nationalRegions 的区域。贝娄是行动中的代码:

在index.html中

<!DOCTYPE html>
<html ng-app="options" lang='en'>

<head>
<title>Select Countries App:</title>
<script src="appModule.js"></script>
<script src="app.js"></script>
</head>

<body ng-controller="ctlOptions">

<label>Country:</label>
<select ng-model="userDomain" ng-options="location.otherName for location in userCountries"  ng-change="nationalRegions(userDomain.idCountry)">
</select>

<label>Region:</label>
<select ng-model="regionDomain" ng-options="region.regionName for region in nationalRegions">

</body>
</html>

现在在appModule.js

var app=angular.module("options",[]);
app.factory('miscellaneous',function(){


return{

    uiRequest:function(scope,inputString,callBack){

        $.ajax({
        type: "POST",
        url:"appBackend.php",
        data: {inputString:inputString},
        dataType: "json",
        success : function(jsonResponce){


                if(callBack && typeof (  callBack )== "function") 
                {  
                    callBack(jsonResponce);
                    scope.$apply();
                }

            },

        error:function(XMLHttpRequest, textStatus, errorThrown){

                scope.colorCode="danger";
                scope.Error="Sorry, there seems to be some problem in your request. Please crosscheck provided informations.";
                scope.$apply();

            }
        })
    },


    fetchCountries:function(scope){

        var inputs={Controller:"service",Action:"userCountries"};
        var inputString = JSON.stringify(inputs);

        this.uiRootRequest(scope,inputString,function(responced){

            scope.userCountries= responced;
            scope.userDomain=scope.userCountries[0]

        });

        return scope.userDomain;
    },


    fetchRegions:function(scope,idCountry){

        var inputs={idCountry:idCountry,Controller:"service",Action:"nationalRegions"};
        var inputString = JSON.stringify(inputs);

        this.uiRootRequest(scope,inputString,function(responced){

            scope.nationalRegions= responced;
            scope.regionDomain=scope.nationalRegions[0];
        });

        return scope.regionDomain;
    }


}

});

最后是app.js

app.controller('ctlOptions',['$scope','miscellaneous',function ctlOptions($scope,miscellaneous){

$scope.userCountries=miscellaneous.fetchCountries($scope);

$scope.nationalRegions=function(idCountry){

        miscellaneous.fetchRegions($scope,idCountry);
    }

}]);

那就是我可以在我犯错误的地方得到帮助,因为正如我所说的那样,代码只能正常工作一次,当我重新选择另一个国家时出现问题而对不起我没有包含 appBackend.php 文件,它没有问题我希望它不会影响debuging,如果似乎有什么不对,请让我知道作为我的第一篇文章在这里我可能有许多错字的代码,但因为它是我的本地机器是完美的书写而不计算手头的问题。

1 个答案:

答案 0 :(得分:0)

在我的代码中有一个甚至难以追踪的解决方案因为它是完美的我会说:)有一点例外,angularjs也不会告诉你。 其here Aaron Gray

回答