2013-04-30 26 views
14

作为后续仍对此plunker:错误:不分配模型表达:未定义(指令:childOne)

plunker

如果我回顾在Chrome控制台中选择时在儿童中的项目1,我得到以下错误:

错误:不分配模型表达:未定义(指令:childOne)

我完全困惑,因为指令元素是一个元素,而不是一个属性,并在指令本身中被指定为这样。

回答

22

TL; DR; - 问题是,属性是蛇案和作用域定义将它们转换为camelCase

好你:

app.directive('childOne', function() { 
    return { 
     restrict: "E", 
     replace: true, 
     scope: { 
      labelName: "@", 
      selectPhrase: "@", 
      ngModel: "=", 
      options: "=", 
     }, 
     template: '<span><div class="local-label">{{labelName}}: </div><div style="width:15px;display:inline-block;"></div>' + 
        '<span style="display: inline-block;"><select ng-model="ngModel" ng-options="o.Id as o.Name for o in options | orderBy:\'Name\'" class="formRequire" required><option value="" selected="selected">{{selectPhrase}} ...</option></select>' + 
        '</span></div></span>' 
    }; 
}) 

的问题是,您绑定ngModel但孩子 - 一个元素它并没有提供一个值。如果我评论那部分它似乎工作正常。

看来,当你有“=”在范围绑定这意味着强制,属性也从蛇的情况下转化驼峰在JavaScript世界

PS定义时:这是真正的错误是有点含糊

+1

谢谢Liviu,我真的不应该使用那个笨蛋,因为我没有创建它,所以我不能编辑它。我改变了重拳,所以我可以显示更正。 – Bye 2013-04-30 16:03:33

+0

谢谢关于camelCase转换的通知。在我的情况下,与下划线属性的名称是问题。 – 2013-09-10 10:39:45

+0

有没有办法解决这个问题,所以它不是不可分配的? – ajbraus 2014-12-08 02:44:26

3
<child-one 
     label-name="Child 1" select-phrase="Please Select Clutch Type" 
     selectModel="ClutchType.Id" options="clutchTypes" > 
</child-one> 


selectModel="ClutchType.Id" 

应该已经

select-model="ClutchType.Id"