与弹出指令一起使用时,双向绑定有问题

时间:2013-02-21 10:26:31

标签: angularjs angularjs-scope

我正在尝试angularjs模态弹出指令。在那个弹出窗口中,我使用了tabs和panes指令。一世 有两个 文本框(两者都具有相同的ng-model = myName),一个在我的主页面中,一个在我的弹出窗口中。如果我改变了 主页面中的值会在弹出文本框中更新,但是当我更改弹出文本框时,主页面文本框不会更新。如何解决它。

// html page
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html ng-app="modalDemo">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>modal popup</title>

<link rel="stylesheet" href="css/bootstrap.css">
<link rel="stylesheet" href="css/style.css">
<script type="text/javascript" src="js/jquery-1.8.1.min.js"></script>

<script type="text/javascript" src="js/angular.min.js"></script>
<script type="text/javascript" src="js/angular-resource.min.js"></script>
<script type="text/javascript" src="js/route1.js"></script>
<script type="text/javascript" src="js/controller.js"></script>
<script type="text/javascript" src="js/scripts.js"></script>
</head>
<body ng-controller="bodyCtrl">
<br />
 <input type="text" ng-model="myName" />
<button ng-click="primaryAction()">click to load default text</button> <br /><br />

<button modal-open="myModal"> click me</button>

<popup modal-id="myModal" modal-type="tabs" show-header="false" header-title="Modal Header">

<tabs>
<pane title="first">
    <input type="text" name="myName" ng-model="myName">
        <button class="btn btn-primary" ng-click="primaryAction()">save</button>
</pane>
<pane title="second">
    <h3>content2</h3>
</pane>
<pane title="Third">
    <h3>content3</h3>
</pane>

</tabs>

我已将我的代码发布在我的小提琴中。 fiddle here

1 个答案:

答案 0 :(得分:2)

那是因为有两个不同的范围,其中一个是另一个的父级。当子作用域上不存在myName属性时,子作用域从父作用域获得myName。也就是说,当您更改外部输入(连接到父作用域)中的值时,tabs指令内的输入会更新。但是当您在选项卡中编辑输入字段的值时,该值将写入子范围上的新myName属性,并且父范围和子范围之间不再连接myName。 / p>

如果您想共享这样的ng-models,请确保您的模型包含一个点。像myModel.myName而不仅仅是myName。这将导致JavaScript首先在子作用域上查找myModel,但由于子作用域没有myModel,因此它在父作用域中查找它并设置myName那个对象。

以下是一个有效的例子:http://jsfiddle.net/Zd7ax/30/