javascript - 观察指令上的元素

标签 javascript angularjs angularjs-directive angularjs-scope

我有下一个代码:

angular.module("Test", [])
.directive("testDirective", function () {
  return {
    restrict: "A",
    scope: {
      model: "="
    }
    link: function(scope, element) {
      scope.$watch(function () {
        element.find("#input").val().length
      }, function (nv){
        console.log(nv);
      });
    }
  }
})
.controller("TestController", function($scope) {
  $scope.model = "Test";
  $scope.updateModel = function() {
    $scope.model = Math.random();
  };
})
;


<div ng-controller="TestController">
  <div test-directive model="model">
    <input id="input" type="text" /> <br />
    <input type="button" value="Edit Model" ng-click="updateModel()" />
  </div>
</div>

指令中 $watch 方法的回调仅在单击按钮时执行。但我想检查该元素的变化。有什么办法可以让它发挥作用吗?

编辑 1

如果我这样做,我就会注意到

scope: false

它不会创建一个隔离的范围,因此我可以从指令或 Controller 双向访问它(这就是我想要的)。但是,它也不允许我观看模型......

如果我在 Controller 上:

$scope.model.test = 1;
$scope.$watch("model.test", function(v) { log(v); });

指令中的 HTML:

<input type="text" ng-model="model.test" /> 

然后我修改 View 中的输入字段,log(v) 永远不会执行...

最佳答案

好的,

所以,我并不完全理解你想要实现的目标,我已经组装了一个简单的应用程序,它有 2 个 Controller 和一个指令。

指令本身包含一个模板,其中包含用于输入和按钮的 HTML。

它还有一个双向绑定(bind)属性 myModel,该属性在模板中使用,并且也是从 TestController 设置的。

您可以通过在文本框中键入内容来查看 2 向绑定(bind) - 其输入显示在下面的文本中,该文本绑定(bind)在 Controller 上 - 而不是直接绑定(bind)到指令。

我还向您展示了如何$broadcast来自您的指令的事件并从您页面上可能存在的任何其他 Controller /指令等监听。单击该按钮将增加计数,如第二个 Controller TestControllerTwo

上的文本所示

希望这能演示您想要的内容?

您可以看到plunker这里

关于javascript - 观察指令上的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25146385/

相关文章:

javascript - 如果没有此警报框,为什么我的代码无法工作?

AngularJS 将 $resource 作为指令参数传递

javascript - 使用 javascript 从 API 下载文件

javascript - 如何在Angular JS中获取url参数

angularjs - 在指令中使用 controllerAs 语法访问父方法

javascript - 检测不支持的浏览器版本并显示特定的 div 和消息

javascript - 在两次提交之间强加等待

javascript - 如何创建带有子菜单的 float 菜单

javascript - 来自指令的数据未在 ng-repeat 中显示

javascript - Angular JS - 单击按钮从指令加载模板 html