【问题标题】:Is it possible to bind and unbind an element on button click? - AngularJS是否可以在单击按钮时绑定和取消绑定元素? - AngularJS
【发布时间】:2015-03-31 03:52:27
【问题描述】:

我创建了一个显示文本和一个输入字段,并将它们与 ng-model 绑定在一起,如下所示。

HTML

  <div ng-app ng-controller="test">
    <div ng-bind="content"></div>
    <input id="txtElem" type="text" ng-model="content">
        <button ng-click="stopBinding()"> Unbind</button>
        <button ng-click="binding()"> Bind </button>
  </div>

JS

function test( $scope ) {
    $scope.content = 'Welcome';

     $scope.binding = function() {
       angular.element(document.getElementById('txtElem')).bind();
    };

    $scope.stopBinding = function() {
       angular.element(document.getElementById('txtElem')).unbind();
    };
};

显示

我发现这个(http://jsfiddle.net/jexgF/) 用于取消绑定方法,但不知道如何再次绑定它,如果单击“绑定”按钮。有人可以帮忙吗?

除了&lt;div&gt;&lt;input&gt;的元素之间的绑定和取消绑定,有谁知道如何绑定和取消绑定两个&lt;input&gt;字段?

【问题讨论】:

  • 为什么要绑定和解绑?
  • 在我的应用程序中,我创建了一个预览和一个用于输入源代码的文本区域。在输入代码期间使用取消绑定,以防止将任何其他代码从预览注入到 textarea。 “绑定”仅在预览时使用。这是因为我的预览具有内置的自动格式化功能。 @DavidGrinberg,你有什么想法吗?

标签: angularjs angular-ngmodel angularjs-ng-model


【解决方案1】:

我不确定您示例中的 test() 函数在哪里,但在控制器中操作 DOM 并不是一个好主意 - 实际上是一种反模式。

正确的做法是创建一个变量,与输入变量content分开,代表预览部分。

您可以简单地在视图中执行此操作;如果您认为此逻辑是仅查看逻辑。 lastBound代表content的最后一个绑定值:

<div ng-init="binding = true">
   <input ng-model="content">
   <button ng-click="binding = false">Unbind</button>
   <button ng-click="binding = true">Bind</button>

   <div ng-bind="lastBound = (binding && content) || lastBound"></div>
</div>

(此处使用ng-init 仅用于说明目的-您应在控制器中设置binding)。

编辑:

如果意图是绑定到另一个ng-model,那么解决方案是不同的,但不是不同的。您仍然需要使用 2 个变量:

<input ng-model="content" ng-change="preview = (binding && content) || preview">
<input ng-model="preview" ng-change="content = (binding && preview) || content">

【讨论】:

  • 嗨,@New Dev,感谢您的回答。如果我想在两个输入字段之间绑定和取消绑定怎么办?我尝试更改您的代码 "
    ​​
    " 到 "​​" ,它会抛出错误 "Expression 'lastBound = (binding && content) || lastBound' is non-assignable."你有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
  • 2016-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多