Angular JS:动态调用函数时范围不正确?

时间:2013-05-02 16:23:17

标签: angularjs angularjs-directive

我是Angular JS的新手。在我的plunkr中,我有一个typeahead,当我在html标记中有typeahead时有效。但是,当我在我的指令中动态生成html时,typeahead不再有效。

代码在这里: http://plnkr.co/edit/KdrxptYAnpTmKa7ZuKkM?p=preview

并且更进一步,当我传入一个函数时,它仍然不起作用: http://plnkr.co/edit/jqN913hJxuVSFAZxAQt7?p=preview

1 个答案:

答案 0 :(得分:2)

我担心这不是你要解决的一个小问题。基本上你正在碰到范围问题。 typeahead指令在它所放置的DOM元素的范围内计算它的表达式(此处为city for city in cities($viewValue))。编写包装器指令的方式使得表达式在指令的范围内进行评估,该范围是隔离的,不会“看到”您的控制器范围。

围绕它的方法有多少,但最简单的方法是在指令范围的$ parent范围内链接$ compiled-ed元素:

var linkedInput = $compile(inputHtml)(scope.$parent);

这是一个有效的插件:http://plnkr.co/edit/fLFwIKNqIRbnesMjZBGj?p=preview

另一种方法是松散隔离范围,并在$parse服务的帮助下“手动”处理双向数据绑定。