onsen popover范围问题

时间:2015-03-26 14:39:13

标签: angularjs popover

有人知道onsen的popover组件有什么用吗?

当我尝试访问定义的最近控制器的变量时,它不起作用。它始终从根范围加载变量。

似乎无法正确解析{{name}}或{{option}}:

<body ng-controller="AppController">
  <ons-navigator var="navigator">
    <ons-page ng-controller="PageController">
      <ons-template id="popover.html">
        <ons-popover cancelable direction="down">
          <my-dialog>{{name}}!</my-dialog>
          <ons-list>
            <ons-list-item ng-repeat="option in options" modifier="tappable">
              {{ option }}
            </ons-list-item>
          </ons-list>
        </ons-popover>
      </ons-template>
    </ons-page>
  </ons-navigator>
</body>

http://plnkr.co/edit/w2ZL3dkv62qSYrhhEj5C?p=preview

它不是加载PageController中定义的名称,而是加载AppController

中定义的名称

1 个答案:

答案 0 :(得分:0)

自动接听。

似乎createPopover只是扭曲了。无论是否有意,它总是会根据根范围解析变量。这不是很好

以下是createPopover方法的修复,因此您可以处理范围。否则,范围始终是rootScope

http://plnkr.co/edit/W4GgqLcJHlj724IB2KRG?p=preview

ons.createPopover = function(page, __scope) {
...
   ons.compile(popover[0], __scope);
...
}

ons.compile = function(dom, __scope) {
   var scope = __scope || angular.element(dom).scope();

我在createPopover中添加了__scope变量并进行了编译。我用控制器的范围创建了popover:

ons.createPopover('popover.html', $scope)

这种方式需要给定范围来解析变量。 angular.element(DOM).scope();总是被解析为root,因为popup元素被附加到createPopover函数的主体上。