3

1) ng-init Eg で初期化された変数があります -

ng-init="password='Mightybear'";

2) .run メソッドからアクセスしたい。例 -

anguar.module("ngApp", [])
.run(function() {
//Access password here
});

以下のシナリオを試しましたが、うまくいきませんでした -

1) angular.module("ngApp", [])
.run(function($rootScope) { 
console.log($rootScope.password) //undefined!!!
});

2) angular.module("ngApp", [])
.run(function($rootScope, $timeout) { 
$(timeout(function() {
console.log($rootScope.password) //undefined!!!
});
});
4

2 に答える 2

3

runブロック内で ng-init 値を取得できません

Angular ライフサイクル

  1. 構成フェーズ (app.config) ($rootScope はここでは使用できません)
  2. 実行フェーズ (app.run) ($rootScope はここで利用可能になります)
  3. ディレクティブは Compile() を取得します
  4. その後、コントローラ、ディレクティブリンク関数、フィルタなどが実行されます。 (ng-initここにあります)

実行フェーズで初期化値を取得する場合は、構成フェーズでその値を設定する必要があります。

構成で値を設定する場合は、構成フェーズで利用可能なapp.constant/を使用できます。AngularJS で悪いパターンと見なされるものはprovider使用しないでください。$rootScope

コード

var app = angular.module('app', []);

app.constant('settings', {
    title: 'My Title'
})

app.config(function(settings) {
    setting.title = 'Changed My Title';
    //here can you do other configurarion setting like route & init some variable
})

app.run(function(settings) {
    console.log(settings.title);
})
于 2015-04-29T10:30:07.130 に答える
0

angular がどのようにロードされるかのウォークスルーをお見せします

角度モジュール ---> .config ----> .run ----> コントローラー (ng-init)

これで、アプローチをクリアできます。

于 2015-04-29T10:29:54.253 に答える