AngularJS中的单向/一次数据绑定

时间:2014-09-09 14:24:02

标签: angularjs

虽然我非常小而且非常快速的应用程序并不是真正的性能问题,但我有兴趣在开始处理大型应用程序之前熟练处理大型应用程序。这使我找到了以尽可能多的方式优化AngularJS的方法,并将这些优化集成为我的“正常”编码例程的一部分。所以!我现在已经摸不着头几个小时,搜索文章和文档,试图找到最好的方法来实现以下目标:

  1. 我有一个下拉选择菜单,其中包含我希望从视图到模型的单向数据绑定选项,因为在这种情况下无需让模型更新视图。
  2. 有关上述内容的一些问题: 这会节省我在$ digest周期中的时间吗?或者,如果我只使用ng-model的双向数据绑定无关紧要?

    我的另一个问题是涉及更多。

    1. 编辑:此问题已修复(如下所示),但我现在遇到了一个新问题。我已将此新问题发布到此问题的底部以提高可见性。
    2. 这是我的模板:

      DropdownTemplate.html

      <div class="form-group">
          <label for="{{::regarding}}" class="col-sm-12 control-label">{{::regarding}}</label>
          <div class="col-sm-12">
              <select class="form-control" id="{{::regarding}}" data-ng-model="data" data-ng-change="update()">
                  <option selected>0</option>
                  <option>1</option>
                  <option>2</option>
                  <option>3</option>
                  <option>4</option>
                  <option>5</option>
                  <option>6</option>
                  <option>7</option>
                  <option>8</option>
                  <option>9</option>
                  <option>10</option>
                  <option>11</option>
                  <option>12</option>
                  <option>13</option>
                  <option>14</option>
                  <option>15</option>
                  <option>16</option>
                  <option>17</option>
                  <option>18</option>
                  <option>19</option>
                  <option>20</option>
              </select>
          </div>
      </div>
      

      这是我的指示:

      .directive('trDropdown', ['Ticket', function(Ticket) {
          return {
              restrict: 'E',
              templateUrl: 'DropdownTemplate.html',
              scope: {
                  regarding: '@'
              },
              link: function($scope, $elem, $attrs){
                  $scope.data = 0;
                  $scope.update = function (){
                      Ticket[$scope.regarding] = $scope.data;
                      //console.log(Ticket[$scope.regarding]);
                  }
              }
          }
      }]);
      

      以下是我在主html页面中使用此自定义元素时的样子:

      <tr-dropdown regarding="Adults"></tr-dropdown>
      

      到目前为止,我的代码运行应该是这样,除了一个小bug。错误是,如果我不包括关于$ scope.data = 0的位;在指令的链接部分,当我的自定义元素被附加到主html页面时,属性“selected”(或甚至selected =“selected”)不会注册。尽管存在这个错误(这不是我主要考虑的问题),但我觉得这对我来说是最优雅的方式来处理单向绑定的概念,如果我甚至需要它的话。我知道有一个名为 bindonce 的插件我愿意使用,虽然我一直在寻找原生解决方案。

      为此,我们非常欢迎通过他人的斗争找到的任何发现!

      **编辑:一次性绑定现在已成功运行,但我遇到了一个奇怪的异常现象。 Batarang将表达式{{:: approx}}显示为继续提取资源,每次更改其中一个下拉列表。据我所知,{{:: approx}}应该取消注册,甚至不是进一步表现页面的因素。是什么赋予了? **

0 个答案:

没有答案