2015-05-11 67 views
1

使用ng-click更新Ionic/Angular中的视图时遇到严重困难。角度/离子ng-click不更新视图,但在模型中更新

我之前遇到类似的问题,但解决了它后面的this指导,这说明如果你的按钮在<label> ng-click不起作用。

我想达到什么目的?

我正在开发一个移动应用程序,并希望允许用户在必要时编辑他们的详细信息。为了从最简单的开始,我开始尝试实现用户可以编辑其名称的功能。在下面的示例中,我试图在单击按钮时更改用户的名称。

奇怪的是当我console.log(Photos.name)我得到正确的值,即(scope.user.name = "Jim"),但视图不反映这种变化。

我的代码如下:

控制器

.controller('ProfileCtrl', function($scope, Photos) { 

    $scope.user = { 
     "name": Photos.name 
    } 

    $scope.changeName = function() { 
     Photos.changeName(); 
     console.log(Photos.name) 
    }; 

}) 

.factory('Photos', function(){ 
    var o = { 
    name : 'James' 
    } 

    o.changeName = function(){ 
    o.name = 'Jim' 
    } 

    return o; 

}); 

HTML 设置模板

这是该按钮的profile.html页面上更新用户的名称(见下文)

<ion-view view-title="Settings"> 
     <ion-content> 
     <ion-list> 
     <div class="item item-input"> 
     <span class="input-label">Change Profile Picture</span> 
     <button type="button" ng-click="changeName()">Add</button> 
     </div> 
    </ion-list> 
    </ion-content> 
</ion-view> 

配置文件模板

<ion-view view-title="My Profile"> 
    <ion-content class="padding"> 

    <div class="item item-body"> 
    <p class="profile-details"> 
     {{user.name}} 
    </p> 
    </div> 
    </ion-content> 
</ion-view> 

我经历了许多SO阅读答案和那些离子网页上,没有运气。从我读过的内容来看,我认为这可能与在儿童范围内设置价值有关,但这是打破它的事情,但我无法确定。

任何人都可以帮忙吗?

回答

4

我相信原因是,一旦你这样做:

$scope.user = { 
    "name": Photos.name 
} 

您在那一刻$scope.user.name值设置为Photos.name值。

当你通过你的工厂内做o.name = 'Jim'改变Photos.name,你基本上分配Photos.name不同的字符串对象,而不是改变已分配给$scope.user.name之一。

你可以用$scope.user = Photos而不是$scope.user = { ... }来证明我的理论(当然,这只是一个概念的快速证明,而不是最终的解决方案)。这样$scope.user.name实际上将访问Photos工厂中保存的name值。

+0

欢呼,让我试试 –

+0

不幸的是,这不是它 –

+1

糟糕。我担心它不会工作。 JavaScript中的字符串是不可变的。 'replace'只会创建一个新的。但是这里应该说的是:'$ scope.user = Photos'而不是'$ scope.user = {...}'(当然,这只是一个概念的快速证明,而不是最终的解决方案)。 – SkyWriter