AngularJS - 创建使用ng-model和md-autocomplete的指令

时间:2016-01-14 15:33:46

标签: javascript angularjs directive angular-material md-autocomplete

我正在尝试为url( regex=r'^$', view=AccountCreateView.as_view(), name="create_account" ), 创建一个指令。我尝试使用AngularJS - Create a directive that uses ng-model提供的答案,但它对我不起作用。

我的CodePen在这里:http://codepen.io/colbroth/pen/QyMaQX/?editors=101

该代码基于https://material.angularjs.org/latest/demo/autocomplete处的自动填充的Angular材质演示。我有多个页面,需要一个自动填充字段来选择一个状态。我不想为每个网页组件重复代码。

md-autocomplete需要state-directive输入,我需要md-autocomplete状态才能在两种情况下反映相同的值。但是当我更新输入元素时,demoCtrl.selected并不反映这一点,反之亦然。

state-directive

<input ng-model="demoCtrl.selectedState">

1 个答案:

答案 0 :(得分:1)

你走在正确的轨道上。你的问题是你的模型是一个字符串 - 在javascript中是一个原语,但如果你想避免这些问题,ngModel总是需要成为一个对象。

  

范围继承通常很简单,你甚至不需要知道它正在发生......直到你尝试双向数据绑定(即表单元素,ng-模型)到一个原语(例如,数字,字符串,布尔值)在子范围内从父范围定义。它没有像大多数人期望的那样工作。会发生什么是子范围获取其自己的属性,该属性隐藏/隐藏同名的父属性。这不是AngularJS正在做的事情 - 这就是JavaScript原型继承的工作原理。新的AngularJS开发人员通常没有意识到ng-repeat,ng-switch,ng-view和ng-include都会创建新的子范围,因此在涉及这些指令时经常会出现问题。 (有关问题的快速说明,请参阅此示例。)

     

通过遵循&#34;最佳实践&#34;可以很容易地避免使用原语这个问题。总是有一个&#39;。在您的ng模型中。

取自Understanding-Scopes 它还链接到this Youtube视频 - 3分钟的投入时间

  function DemoCtrl() {
    var self = this;
    self.state = {
      selected: "Maine"
    };
  }

Fixed codepen