2016-03-02 62 views
4

的index.html,我做這樣的事情:如何將範圍內的變量注入到角控制器中?

<div ng-controller="MyController"> 
    <div ng-model="pk" ng-init="pk='2'"></div> 
</div> 

不管怎樣,在我的文件,我做這樣的事情:

.controller('MyController', [ 
    '$scope', function($scope) { 
    alert('Sup ' + $scope.pk); 
    } 
]) 

因此,可以說的pk的URL是2,我期望看到類似這樣的內容:

Sup 2

然而,我的輸出是這樣的:

燮不確定

我在做什麼錯?謝謝!

+0

如果你手工編寫'ng-init =「pk ='2'」',它會起作用嗎? – Selcuk

+0

沒有。這也行不通:/ –

+1

所以你的問題與Django無關。 – Selcuk

回答

1

延遲警報與$timeout

.controller('myCtrl', [ 
    '$scope', '$timeout', function($scope, $timeout) { 
    $timeout(function() 
     alert('Sup ' + $scope.pk); 
    }); 
    } 
]); 
1

使用$scope.$watch

.controller('MyController', ['$scope', function($scope) { 
    $scope.$watch('pk', function(newValue, oldValue) { 
     alert('Sup ' + newValue); 
    }); 
}]); 

你之前的觀點已經被初始化的,因此之前ng-init被稱爲alert('Sup ' + $scope.pk);被調用。

2

出現這種情況,是因爲從控制器代碼視圖代碼之前執行,所以運行

alert('Sup ' + $scope.pk); 

ng-init時 - 不會執行。

因此,對於解決方案,你可以在裏面控制器,或從其他答案喜歡watch使用的解決方案,或timeout

1

角度簡單的分配值,有應始終遵循一招:「在模型中始終使用點」 。 例如:

ng-model="models.pk"

其他位於this answer

您還應該考慮以下一些guidelines from John Papa可以防止這種問題,請參閱here一個示例。 試試吧,告訴我它是怎麼回事。

相關問題