包装angular-ui-typeahead会打破on-select回调

时间:2013-12-03 00:51:24

标签: angularjs angularjs-directive angular-ui angular-ui-bootstrap angular-ui-typeahead

我正在尝试使用我自己的指令包装AngularUI的typeahead directive,以便我可以打包一些共享数据/行为,以便在我的应用中更容易重用:Plunker

onSelect回调中,为什么正确的值仅在超时后显示?

作为参考,这可以在没有包装指令的情况下正常工作:Plunker

2 个答案:

答案 0 :(得分:0)

在隔离范围指令中使用=,以便仅在更新模型后调用绑定函数:

scope : {
    selectedModel : "=",
    onSelect : "="
}

Plunker

答案 1 :(得分:0)

您必须在指令中使用&符号并传递html中的项目。从Angular Docs“& binding允许指令在特定时间触发对原始范围上下文中的表达式的求值。允许任何合法表达式,包括包含函数调用的表达式。对此,& bindings非常适合将回调函数绑定到指令行为。“

指令中的隔离范围:

scope: { 
onSelect: '&'
}

<强> HTML

<input autocomplete="off"
placeholder="Enter &ldquo;jo&rdquo; and pick something"
ng-model="selectedModel"
typeahead="v as v.name for v in vendors | filter:$viewValue"
typeahead-on-select="onSelect({item: $item})" />

回调函数应该带一个项目

function myCallback(item) {
console.log(item);
}