角度

时间:2015-06-30 07:42:34

标签: javascript angularjs

我有以下代码:

as.controller('OvrigtCtrl', function($scope, $rootScope, $http, $routeParams, $location)
{
    $scope.opt = {};

    $scope.addSupercustomerOvrigt = function()
    {
        $scope.doAddSupercustomer = true;
    }

    $scope.addS = function()
    {
        console.log($scope.opt.selectedTabell); //Shows the value
        console.log($scope.selectedTabell); //Shows undefined
    }
});

HTML:

<div ng-if="doAddSupercustomer">
    <table class="table">
        <tr>
            <td>Namn</td><td><input class="form-control input-sm2" type="text" ng-model="selectedNamn"></td>
        </tr>
        <tr>
            <td>Abonnemangstabell</td><td><input class="form-control input-sm2" type="text" ng-model="opt.selectedTabell"></td>
        </tr>
        <tr>
            <td>Har regportal</td><td><input type="checkbox" ng-model="selectedRegportal"></td>
        </tr>
        <tr>
            <td>Fri DHCP</td><td><input type="checkbox" ng-model="selectedDhcp"></td>
        </tr>
    </table>
    <button type="submit" ng-click="addS()" class="btn btn-success input-sm2">Lägg till</button>
</div>

为什么我不使用对象将范围变量添加到?

时会收到未定义的消息
ng-model="selectedTabell"
console.log($scope.selectedTabell)

上面的代码结果是一条未经解释的消息。

ng-model="opt.selectedTabell"
$scope.opt = {};
console.log($scope.opt.selectedTabell)

上面的代码有效。我可以看到用户输入的值。

所以我的问题是,为什么我必须使用一个对象?在这种情况下?

1 个答案:

答案 0 :(得分:0)

您正面临子范围继承问题。 ng-if将在您的控制器中创建一个子范围,这意味着,范围绑定到输入框是范围绑定到控制器的子节点。如果您是与原始值selectedTabell绑定的数据,则在您第一次更新输入框时,实际上是在创建一个新的&quot; selectedTable1&#39;儿童范围内的财产。

解决方案是避免绑定到原始值。而是确保通过绑定到对象来使用点符号。

有关详细信息,请参阅Angular文档:Understand Scopes

  

范围继承通常是直截了当的,你通常不会   甚至需要知道它正在发生......直到你尝试双向数据绑定   (即表格元素,ng-模型)到基元(例如,数字,字符串,   boolean)在子范围内从父范围定义。它   没有像大多数人期望的那样工作。怎么了   是孩子范围得到自己的隐藏/阴影的属性   同名的父属性。这不是AngularJS的内容   做 - 这就是JavaScript原型继承的工作原理。新   AngularJS开发人员通常没有意识到ng-repeat,ng-switch,   ng-view和ng-include都创建了新的子范围,所以问题就出现了   经常出现涉及这些指令的时候。 (见这个例子   为了快速说明问题。)

     

通过遵循以下内容,可以轻松避免使用原语这个问题   &#34;最佳实践&#34;总是有一个&#39;。在您的ng模型中