当前位置: 首页 > 面试题库 >

AngularJS input [placeholder]指令被ng-model破坏

濮阳繁
2023-03-14
问题内容

因此,第一天使用angularjs进行工作,但我做不到。我正在尝试使用angular指令模仿html5占位符。直到我向该字段添加ng-
model为止,它完全可以工作,然后它仅在用户与该字段进行交互并且破坏该字段具有的任何值之后才可以工作。

在这里编码 http://jsbin.com/esujax/32/edit

指令

App.directive('placehold', function(){
  return {
    restrict: 'A',
    link: function(scope, element, attrs) {
      var insert = function() {
        element.val(attrs.placehold);
      };

      element.bind('blur', function(){
        if(element.val() === '')
          insert();
      });

      element.bind('focus', function(){
        if(element.val() === attrs.placehold)
          element.val('');
      });

      if(element.val() === '')
        insert();
    }
  }
});

HTML

<textarea ng-model="comment" placehold="with a model it doesn't work"></textarea>

似乎超级简单,但我迷路了


问题答案:

您的样本中仅有几处修改:

app.directive('placehold', function() {
  return {
    restrict: 'A',
    require: 'ngModel',
    link: function(scope, element, attr, ctrl) {

      var value;

      var placehold = function () {
          element.val(attr.placehold)
      };
      var unplacehold = function () {
          element.val('');
      };

      scope.$watch(attr.ngModel, function (val) {
        value = val || '';
      });

      element.bind('focus', function () {
         if(value == '') unplacehold();
      });

      element.bind('blur', function () {
         if (element.val() == '') placehold();
      });

      ctrl.$formatters.unshift(function (val) {
        if (!val) {
          placehold();
          value = '';
          return attr.placehold;
        }
        return val;
      });
    }
  };
});

您可以在此处进行测试:http :
//plnkr.co/edit/8m54JO?p=preview

不确定它是否是最佳解决方案,无论如何都可以。即使键入相同的文本,也就是占位符属性中的文本,也会导致它检查模型的焦点值。



 类似资料:
  • 问题内容: 我正在尝试创建一个指令,该指令将创建与创建指令的元素具有相同ng-model的输入字段。 到目前为止,这是我想到的: 的HTML 的JavaScript 但是,我不确定这是处理这种情况的正确方法,并且存在一个错误,即我的控件未使用ng-model target字段的值初始化。 这是上面代码的简称:http ://plnkr.co/edit/IvrDbJ 处理此问题的正确方法是什么? 编

  • 本文向大家介绍AngularJS ng-mousedown 指令,包括了AngularJS ng-mousedown 指令的使用技巧和注意事项,需要的朋友参考一下 AngularJS ng-mousedown 指令 AngularJS 实例 在鼠标按下时执行表达式: 定义和用法 ng-mousedown 指令用于告诉 AngularJS 鼠标在指定的 HTML 元素上按下时要执行的操作。 ng-m

  • 问题内容: 角度自定义表单组件/指令和$ dirty属性 使用常规输入时,例如 在输入框中键入后为true。 我想创建一个简单的指令,例如 样本用法为 在用户单击两个按钮中的任何一个之后,设置为true。 这是如何完成的? 问题答案: 在DDO中使用ngModel控制器和属性的对象形式: 用法: 通过实例化和使用ng- model控制器 ,该指令将根据需要自动设置表单控件。 演示 我建议隔离范围作

  • 问题内容: 我正在为jQuery日期选择器插件创建AngularJS指令,当日期选择器日期更改时,该插件应更新ng-model。 这是到目前为止的代码: 考虑到在调用事件时范围,元素,属性,ngModel不可用,如何在“ dp.change”事件中更新ngModel? 谢谢! 问题答案: 可以肯定的是,已添加到angular的任何插件都不会更新angular范围的,我们需要在它的jquery ch

  • 问题内容: 我想在内容更改时创建具有自定义行为的列表。我尝试为此创建一个指令,但是我对如何将ng-transclude与ng- repeat指令结合起来感到迷茫。有人可以让我走上正轨吗? HTML: Javascript: 我已经在这里工作了一部分 编辑: 条件: 该项目的模板必须在视图中定义,而不是在指令中定义,并且必须有权访问子作用域中的项目属性。理想情况下,我想像在ng-repeat指令中那

  • 问题内容: 我正在构建一个简单的angularjs应用,并且试图实现无需页面刷新的登录。 我在做什么 初始化时,ng-include会加载/ set / save。/ set / save 中有。因此,当单击指令时,将打开一个窗口,并且当关闭窗口时,应更改ng-include的src。 问题 当指令在ng-include内部使用时(ng-include src在init上具有默认值)时,什么都不会