2015-06-13 61 views
4

我有以下控制器:AngularJS:模型控制範圍內沒有更新

app.controller('MyCtrl', function($interval, $scope) { 
    $scope.foo = 2; 
    $interval(function() { 
     console.log($scope.foo); 
    }, 1000); 
}); 

而下面的代碼在我看來:

<input type="text" ng-model="foo" /> 

當我加載頁面,輸入正確填入值爲「2」。但是,如果我更改輸入中的值,控制檯將繼續記錄「2」(不含引號)。

我已經使用$interval只是爲了說明 - 與$watch()回調只觸發一次,然後再也不會。如果我在輸入上使用ng-change="",那麼回調中的$scope.foo總是等於2.

我在做什麼錯了?

+0

沒有錯,這個代碼片段

綁定的模式,你寫的。檢查例如:http://plnkr.co/edit/vaK63tDaBhnVLk4rC11z?p=preview。你如何實例化你的控制器和應用程序? – Andrey

+0

@Andrey我用$ routeProvider創建到MyCtrl路線: $ routeProvider 。當( '/我的',{ templateUrl: 'TPL/my.html', 控制器: 'MyCtrl' }) 和應用程式可實例化爲VAR應用= angular.module( '應用',[ 'ngRoute', 'ngCookies']); –

+0

你能提供[MCVE(http://stackoverflow.com/help/mcve)? – Andrey

回答

10

如果使用NG-模式,你必須有一個點在there。通過創建一個對象像這樣

控制器

$scope.form={ 
    foo:0 
}; 

視圖

<input type="text" ng-model="form.foo" /> 
+0

這很好。你能向我解釋是什麼讓你提出這個建議嗎? –

+1

有時會在您的控制器範圍的上層中角度推送範圍。如果將直接可變模型綁定到模型中,則可以將此變量添加到當前作用域所在的新添加的作用域中。但如果你的對象屬性使用綁定那麼無論範圍可以通過角度推動對象之間的關係不破 –

+0

@NeilGarb從而封底[5 AngularJS反模式和缺陷(HTTP一個體面的博客帖子:// nathanleclaire的.com /博客/ 2014/04/19/5 angularjs-反模式和 - 陷阱/)。列表中的第一個忘記了這個點。 –