如何让ng-change也适用于相同的值?

时间:2016-09-22 05:25:46

标签: javascript html angularjs

我是AngularJs的新手。 我的问题是:我有一个下拉框和一个文本框。我从下拉框中选择了一些值并ng-change点火,当有人开始在文本框中输入时,下拉框也会变为默认值。重置下拉菜单后,如果我再次在我之前选择的下拉列表中选择相同的值,则ng-change不会被解雇。

我也使用了ng-click,但它并不适用于所有浏览器。我遇到了这个问题。

有没有办法让ng-change使用与前一个或某个替代方案相同的值?

我的代码段:

    <code>
    <input class="form-control" type="text"  id="city1" onblur="codeAddress();" name="city1"  ng-model="city1" required>
    <select class="form-control" id="brandC" name="brandC" ng-model="vehicle.companyId"  ng-change="selectServiceCenter();" required>
    <option ng-selected="loginbrandId1==null" value='' >Select Your Car</option>
    <option  ng-selected="loginbrandId1 == vehicle.companyId" ng-repeat="vehicle in vehiclenames"   value='{{vehicle.companyId}},{{vehicle.vehicleID}}' >{{vehicle.companyName}}--{{vehicle.vehicleNumber}}</option>
    </select>
    <script>
$scope.watchHitCountcity = 0;
    $scope.$watch('city1', function (newValue, oldValue) {

        if(newValue!=undefined)
            {
             document.getElementById("brandC").value= "";
            }
        $scope.watchHitCountcity++;
    },true);
    $scope.selectServiceCenter = function() {
    alert("execute");
    }
    </script>
    </code>

2 个答案:

答案 0 :(得分:0)

不要使用 document.getElementById(&#34; brandC&#34;)。value =&#34;&#34;; 使用 ng-model 喜欢:

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

        if(newValue!=undefined)
            {
             vehicle.companyId = "";
            }
        $scope.watchHitCountcity++;
 },true);

答案 1 :(得分:0)

问题背后的原因

您的案例中发生的事情是您刚刚使用原生java脚本document.getElementById("brandC").value= "";从下拉列表中删除了值,但这并未改变该元素的ng-model值,即ng-model="vehicle.companyId"。因为下拉列表的ng模型没有改变,ng-change="selectServiceCenter();"函数没有被触发,因为角度仍然是ng-model相同。

<强>解决方案

因此,按照@Sandeep

的建议更改以下代码
$scope.vehicle ={}; //create vehicle object in scope..
$scope.$watch('city1', function (newValue, oldValue) {

        if(newValue!=undefined && newValue!=oldValue){
             $scope.vehicle.companyId = null;
            }
        $scope.watchHitCountcity++;
 },true);