私は次のコードを持っています、
HTML
<div ng-app="test">
<div ng-controller="containerCtrl">
<component data-module="components"></component>
</div>
</div>
JS
var test = angular.module('test', []);
test.controller('containerCtrl', ['$scope', '$rootScope', function ($scope, $rootScope) {
$scope.components = [];
$scope.$on('onSomething', function(e) {
$scope.components = $rootScope.config;
});
}]);
test.directive('component', function () {
var linkFn = function(scope, element, attrs) {
scope.$on('onSomething', function(e) {
console.log(scope, e, scope.module, e.currentScope.module);
/*
* Here 'module' is an array in both 'e' and 'scope' , but when I console it says [].
*/
console.log("onSomething!");
});
};
return {
restrict: 'E',
scope: {
module: '=module'
},
link : linkFn
};
});
test.run(['$rootScope', '$timeout', function ($rootScope, $timeout) {
$timeout(function(){
$rootScope.config = [{id: "c1", width: 100, height: 100 }];
$rootScope.$broadcast("onSomething", "");
},5000);
}]);
フィドル http://jsfiddle.net/vFncP/4/
問題メソッドに
はrun
、データベースから構成を受け取る ajax リクエストがあります。リクエストが完了broadcast
すると、スコープ レベルに渡されます。ここでの問題は、ブロードキャストを で受信していることです。またはdirective
をコンソールにすると、データを含む配列を持つが表示されますが、コンソールにすると、 と表示されます。エラーが発生しません。何か間違っていますか?e
scope
module
scope.module
[]
注:を追加する$scope.$watch
と役立つ場合がありますが、回避しようとしてい$watch
ます。それを行う他の方法はありますか?
前もって感謝します