2016-10-03 8 views
0

と空の配列を生じ、私はこのようなカスタムディレクティブcategories-selectを包むcategoriesControllerを持っている:取得配列まだ新しい角度世界で奇妙な行動

<div ng-controller="categoriesController" ng-init="init()"> 
    <categories-select></categories-select> 
</div> 


angular.module('app') 
    .directive('categoriesSelect', [function() { 
    return { 
     restrict: "E", 
     templateUrl: 'categoriesSelectTemplate', 
     controller: ['$scope', function ($scope) { 

      console.log($scope) 
      console.log($scope.categories) 
     }], 
    } 
}]) 

categoriesControllerが持っていますカテゴリの配列

私はディレクティブの中に入る奇妙な行動は次のとおりです。私はそれで何かをするカテゴリの配列を取得しようとするたび

enter image description here

ので、私はそれが空だということを見つけるが、それは-atです同じ時間に、$scopeが入力されました。

また、ディレクティブスコープを分離して配列オブジェクトを渡すことも試みましたが、同じ奇妙な動作がありましたが、とにかくこの単純なコードが機能しない理由を知りたいと思います。

答えて

1

私は常に指示の中に必要なパラメータを渡します。決して親のスコープを共有しません。 各ディレクティブを見ると、必要なものが表示され、未知の動作は決してありません。

ので、角度指令:

angular.module('app') 
.directive('categoriesSelect', [function() { 
return { 
    restrict: "E", 
    scope: { 
     categories: '=' 
    }, 
    templateUrl: 'categoriesSelectTemplate', 
    controller: ['$scope', function ($scope) { 

     console.log($scope) 
     console.log($scope.categories) 
    }], 
} 
}]) 

とHTML:

<categories-select categories="categories"></categories-select> 

編集:

を私はあなたのディレクティブコントローラは、親スコープから来るカテゴリの前に初期化なっていると思います。ディレクティブHTMLにカテゴリを描画しようとすると、それらを取得するか$ scopeを使用します。$ watchCollection内の指示コントローラ

$scope.$watchCollection('categories', function (newVal, oldVal) {  
    console.log(newVal); 
}); 
+0

ああ、あなたは私を救った!あなたの "編集"は正しかったが、なぜ最初のconsole.logに配列が表示されているかが分からないのですか? – Hashem

+1

これはブラウザコンソールの魔法です!ブラウザが$ scopeを印刷する時にはすでにそこにあるカテゴリが表示されますが、$ scope.categoriesブラウザのように直接フィールドを表示するとまだ空であることが分かります...分かりません。あなたはいくつかの勘違いを持っ​​ていますか? –