2015-05-29 59 views
2

我試圖理解這種行爲: 當我改變輸入視圖的變化,但當我點擊按鈕警報框不改變$ scope.firstName。感謝您給我的建議。 問候

var app = angular.module('myApp', []); 
 
app.controller('myCtrl', function($scope) { 
 
    $scope.firstName = "John"; 
 
    $scope.lastName = "Doe"; 
 
    var test=$scope.firstName; 
 
    $scope.test=function(){  \t 
 
    \t alert(test);  \t 
 
    }; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="myApp" ng-controller="myCtrl"> 
 
    First Name: <input type="text" ng-model="firstName"><br> 
 
    Last Name: <input type="text" ng-model="lastName"><br> 
 
    Full Name: {{firstName + " " + lastName}} 
 
    <button ng-click="test()">Click</button> 
 
</div>

+0

的測試變量在您創建控制器時進行初始化,而不是每次修改$ scope.firstName。這就是爲什麼你每次看到相同的價值。 測試變量沒有利潤的「兩天數據綁定」的角 – vincent

+0

thnks爲您的答案 –

回答

3

目前,當您啓動控制器,你正在做三兩件事:

$scope.firstName = "John"; 
$scope.lastName = "Doe"; 
var test=$scope.firstName; 

所以你的變種測試僅當您啓動控制器,而不是當初始化你懂你的功能。你的功能,只打印這個值。

如果你想打印範圍的當前版本,你需要做的是:

var app = angular.module('myApp', []); 
app.controller('myCtrl', function($scope) { 
    $scope.firstName = "John"; 
    $scope.lastName = "Doe"; 

    $scope.test=function(){  
    alert($scope.firstName);   
    }; 

}); 
+0

thnks爲您的答案 –

+0

不客氣。 –

0

你的測試變量只能與李四值初始化一次。 以確保您的警報顯示更新的值,您可以直接訪問您的$ scope變量,如上一個答案中所建議的那樣,或者在作用域上放置一個$watch$watch服務實際上手錶在$範圍的變化,然後將一組指令,例如:

$scope.$watch('firstname', function() { 

     test=$scope.firstName; 
    }); 

每一次名字的變化,該功能將更新的測試值,然後警報將顯示更新的值

相關問題