这是jsfiddle示例我的情况。
首先,这是用接收到的维度创建指令的正确方法吗?然后,每个指令都应该与其他指令隔离。因此我使用的是scope: {}
.
问题是调用控制器中的函数..它似乎也没有收到广播..
我确信这是一个微不足道的问题..我是 Angular 的新手 :)
我有一个页面,我在其中使用 ng-repeat 加载了许多组件:
<div ng-app="test">
<div ng-controller="containerCtrl">
<component ng-repeat='c in components' id="c.id" my-width="{{c.width}}" my-height="{{c.height}}">
</div>
</div>
控制器:
controller('containerCtrl', function ($scope) {
$scope.components = [{ id: "c1", width: 100, height: 100 },
{ id: "c2", width: 200, height: 100 },
{ id: "c3", width: 300, height: 100 }];
//in the actual controller I am using a socket provider and doing
//socket.forward([
// 'initPage',
// 'refreshPage'
// ], $scope);
//simulating it with a simple broadcast here..
$scope.$broadcast("onSomething", "");
$scope.doSomething = function (data) {
alert("doing something");
};
}).
和指令:
directive('component', function () {
var linkFn = function(scope, element, attrs) {
$(element).
resizable({
stop: function( event, ui ) {
scope.emitSomething(attrs.id, ui.position);
}
});
scope.$on('onSomething', function(res) {
alert("onSomething!");
});
};
return {
restrict: 'E',
template: '<div class="ui-widget-content" style="width: {{width}}px; height: {{height}}px;"></div>',
replace: true,
scope: {
width:'@myWidth',
height:'@myHeight'
},
link : linkFn
};
});