【问题标题】:Change value of input placeholder via model?通过模型更改输入占位符的值?
【发布时间】:2013-07-16 19:03:27
【问题描述】:

我正在尝试从控制器更改输入占位符的值,但不知道如何。

input(type='text', ng-model='inputText', side='30', placeholder='enter username')

有没有办法修改模型的元素属性?

【问题讨论】:

    标签: angularjs pug


    【解决方案1】:

    你可以在控制器中绑定一个变量:

    <input type="text" ng-model="inputText" placeholder="{{somePlaceholder}}" />
    

    在控制器中:

    $scope.somePlaceholder = 'abc';
    

    【讨论】:

    • 它可以工作,但是,最终用户可以看到整个表达式,但会有短暂的延迟。这就是为什么有 ng-binding 的原因。见docs.angularjs.org/api/ng/directive/ngBind
    • 另外,在 IE 中也不起作用,抛出错误。不鼓励 syle="{{}}" 的原因可能相同:docs.angularjs.org/guide/ie
    • @BùiThanhHải 在这种情况下您将如何使用 ng-bind?有代码示例吗?
    • 您的示例无法在设备上运行。键盘显示但不写
    • 完成 ng-attr-*attributeName* 提到的属性使用的 ng-bind 功能ysub
    【解决方案2】:

    对于我来说,接受的答案仍然在 IE 中引发了 Javascript 错误(至少对于 Angular 1.2)。这是一个错误,但解决方法是使用 https://docs.angularjs.org/guide/interpolation 上详述的 ngAttr

    <input type="text" ng-model="inputText" ng-attr-placeholder="{{somePlaceholder}}" />
    

    问题:https://github.com/angular/angular.js/issues/5025

    【讨论】:

      【解决方案3】:

      由于 AngularJS 不像 jQuery 那样具有指令性 DOM 操作,因此修改一个元素的属性的正确方法是使用指令。 通过指令的链接功能,您可以访问元素及其属性。

      将整个输入包装在一个指令中,您仍然可以通过控制器属性引入 ng-model 的方法。

      此方法将有助于将 ngmodel 的逻辑与控制器的占位符解耦。 如果他们之间没有逻辑,你绝对可以像瓦格纳弗朗西斯科所说的那样去。

      【讨论】:

        【解决方案4】:

        正如瓦格纳弗朗西斯科所说,(在 JADE 中)

        input(type="text", ng-model="someModel", placeholder="{{someScopeVariable}}")`
        

        在你的控制器中:

        $scope.someScopeVariable = 'somevalue'
        

        【讨论】:

        • @cpburnz - 这看起来像是向我回答问题的有效尝试。如果你不喜欢它,你应该投反对票,而不是标记为删除。
        • 答案与@Wagner Francisco 完全相同
        猜你喜欢
        • 1970-01-01
        • 2018-02-09
        • 1970-01-01
        • 2021-05-08
        • 1970-01-01
        • 2019-08-22
        • 2015-09-20
        • 2013-11-22
        • 2021-03-01
        相关资源
        最近更新 更多