ui-if如果与ng-model发生冲突?

时间:2015-10-18 20:40:00

标签: javascript angularjs angular-ngmodel prototypal-inheritance

非常简单的代码:

    <div ui-if="showMemberId">
        <input ng-model="memberId" ng-change="test()" id="memberId" name="memberId" class="text" type="text">
    </div>

对于控制器:

$scope.memberId = 'SDF';
$scope.test = function test(){
    console.log($scope.memberId);
};
$scope.showMemberId = true;

奇怪的是,ng-change有效,但不是ng-model。当我输入输入时,它只是将字符串SDF一遍又一遍地记录到控制台,因为模型没有改变。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

似乎ui-if正在创建像ng-if这样的子范围。因此,外memberId范围将与ng-model内的ui-if不同。 在这种情况下,您需要在定义dot rule时遵循ng-model。基本上,当它创建子范围时,它的原型继承自父范围。并且prototypal inheritance适用object类型而不是primitive types

要使其正常工作,您需要在控制器中定义对象,如$scope.model ={}&amp;定义其中的所有属性。

<强>标记

<div ui-if="showMemberId">
    <input ng-model="model.memberId" ng-change="test()" 
     id="memberId" name="memberId" class="text" type="text"/>
</div>

<强>控制器

$scope.model = {}; //made an object type model
  

我建议您使用ng-if代替ui-if,就像有角度一样   提供相同的功能。