[英]how to check if ng-init is processed without using $scope in angularjs?
HTML代碼
<div ng-controller = "ctrl as ct">
<input type="text" ng-model="ct.recentTurn" ng-init = "ct.recentTurn="555">
</div>
角度代碼
(function() {
angular.module("app", []).controller("ctrl", mainCtrl);
mainCtrl.$inject =["$scope"];
function mainCtrl($scope){
var ctrl = this;
console.log(this.recentTurn); // this give undefined
$scope.$watch("ct.recentTurn", function(old, newv){
console.log(old);
console.log(newv);
//these two give correct value 555.
});
}
})();
我想在控制器加載有參數lastTurn時調用一個函數,但是在加載控制器時lastTurn卻沒有按我想要的定義和初始化。 將從服務器拋出value最近的值。 使用$scope.$watch
函數可以解決此問題,但我想避免使用$ scope。 所以無論如何我可以在ng-init初始化變量時找到?
在控制器主體中未定義變量的原因是因為控制器功能充當了構造函數。 每當創建控制器的作用域時(在您的情況下就是編譯<div ng-controller="ctrl as ct">
且將控制器的作用域綁定到DOM時),都將調用此構造函數。
由於您的ng-init
嵌套在ng-controller
指令中,因此它將在調用控制器構造函數后綁定(並由此求值)。 這意味着你的線
console.log(this.recentTurn); // this give undefined
在ng-init
的表達式求值之前調用。
使用ng-init
初始化簡單變量可能被認為是不好的做法,因為您基本上是在模板/視圖中放置應用程序邏輯。 這是不希望的。 實際上,很少有ng-init
被視為有效的用例,您可以在文檔中閱讀更多信息(紅色大警告框) 。 代替使用ng-init
您應該簡單地在控制器中初始化變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.