2013-10-16 50 views
15

在我看来,我有一个输入,一个跨度,像这样一个按钮:

<script type="text/ng-template" id="myTemplate.html"> 
    <input type="text" ng-model="phoneNumber"> 
    <span>{{ phoneNumber}}</span> 
    <input type="button" ng-click="click()"> 
</script> 

当在文本框中键入的内容span更新为预期阅读。但点击该按钮时,phoneNumber尚未更新控制器内:

app.controller('myPopopCtrl', ['$scope', '$modalInstance', 
    function ($scope, $modalInstance) { 
     $scope.phoneNumber= '';  

     $scope.click = function() { 
     alert($scope.phoneNumber); // alerts only '' 
     }; 

是有一些newbe错误,你可以在角使这使​​得东西不是在控制器内的$scope更新?

我需要注意的angular-ui modal是否存在$ scope问题?

编辑:

好像phoneNumber获取2个作用域创建。一次在蓝色箭头的范围内,其中phoneNumber: ''和一次在子范围内的红色箭头。视图使用在儿童范围phoneNumber和控制器使用父范围phoneNumber ...

enter image description here

为什么两个作用域创建?

+0

定义的点击方法在哪里? – Chandermani

+0

点击方法是在popupController里面定义的(我更新了这个问题来澄清) – Cotten

+0

然后,更好的选择是传递一个对象而不是字符串,因为字符串分配会在子范围内创建一个新字符串。创建类似'$ scope.phone = {number:null}'的东西并传给它。 – Chandermani

回答

15

ng-include创建一个新的范围。所以传递一个对象,而不是字符串

$scope.phone={number:null}

模板然后貌似

<script type="text/ng-template" id="myTemplate.html"> 
    <input type="text" ng-model="phone.number"> 
    <span>{{ phone.number}}</span> 
    <input type="button" ng-click="click()"> 
</script> 

看这个wiki理解与原型继承的问题。

+1

永远不会猜测那些角度存在的问题..谢谢:) – Cotten

+0

这是几小时的心碎试图弄清楚为什么我的模态不工作,直到我偶然发现这一点,谢谢。 – ThrowsException

1

有同样的问题和一些实验后,我就写

<input type="text" ng-model="$parent.phoneNumber"> 

这种方式输入绑定到蓝色的范围,这是你想要什么解决。

其他的方法是用true-ish值初始化phoneNumber。尝试$scope.phoneNumber= '123'; - 为我工作得很好。

Angular似乎走上范围树寻找一个属性绑定。如果找不到任何东西 - 它会绑定到你的图片中最内层的范围,红色范围。 正如其他答案所暗示的那样 - 这个红色范围是由ng-include创建的,作为控制器$范围的子项。