Angularjs单向绑定绑定数据的一种方式

时间:2015-11-25 07:19:19

标签: angularjs data-binding model-binding oneway

我有一个这样的伪代码,其中使用单向绑定运算符(::)我试图看看角度是否正在观察变化。所以我必须将它包含在input标记内。输入标记内的model data应该以一种方式解析,因为它之前是::。但是,如果我对输入进行更改并单击按钮以查看更改,则会反映日志中的更改。但它不应该注意这些变化。

<!DOCTYPE html>
<html ng-app="app">
<head>
    <meta charset="utf-8">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0-beta.2/angular-animate.js"></script>
</head>
<body class="container" ng-controller="ItemsController">
    <ul ng-repeat="item in ::items">
        <li>
            <!-- in actual code the input will not be included -->
            <input type="text" ng-model="::item.name"> {{ ::item.name }}
            <!-- actual code -->
            <!-- {{ ::item.name }} -->
        </li>
    </ul>
    <button type="btn" ng-click="click()">Button</button>

    <script>
        angular.module('app', [])
        .controller('ItemsController', function ($scope) {
            $scope.items = [
                {name: 'item 1'},
                {name: 'item 2'},
                {name: 'item 3'}
            ];

            $scope.click = function () {
                for (var obj of $scope.items) {
                    console.log(obj.name);
                }
            };
        })
    </script>
</body>
</html>

1 个答案:

答案 0 :(得分:2)

有几件事。

是一次,没有一种方式粘合。当您希望仅对表达式进行一次评估而不是观察更改时,这非常有用。

:: ng-model什么都不做,它仍然会使用你输入的值更新范围并更新项目名称。

同时{{ ::item.name}}应保持不变,因为是一次约束,并且不会注意其他更改。

因此,您将看到日志中的更改,因为值实际发生了变化,不会发生变化的是视图。