我的控制器在其范围内声明了一个变量。我希望这个变量可以在$ rootScope。$ on中访问,但似乎并非如此。这是我的问题。
这是我的控制器:
app.controller('MainCtrl', function($rootScope, OnTest) {
$scope.variable = null;
$rootScope.$on('eventCalled', function() {
if ($scope.variable == null) {
alert("THIS IS MY ISSUE: SHOULD NOT BE NULL");
}
});
$scope.methodCalledFromTheView = function () {
$scope.variable = {age: 23};
TestApp.method1();
}
});
这是我的服务:
app.service('TestApp', function ($rootScope) {
this.method1 = function () {
$rootScope.$emit("eventCalled");
}
});
输出:
“这是我的问题:不应该是空的”
我应该更改什么,以确保$ rootScope内可以访问$ scope.variable。$ on?
答案 0 :(得分:0)
这是针对双向绑定的更多基于事件的更新的解决方案。此外,通过$emit
的工作方式,它只将事件发送到$ rootScope而不是所有子项。 $ broadcast更适合应用于控制器或指令(嵌套在DOM中的任何东西),而$ emit更适合服务,因为服务通常不会创建隔离范围。
// CONTROLLERS SHOULD NOT ACCESS $ROOTSCOPE, BUT USE THEIR OWN $SCOPE
app.controller('MainCtrl', function($scope, TestApp) {
$scope.variable = null;
TestApp.broadcastEventCalled();
TestApp.onEventCalled($scope, function() {
$scope.variable = {age: 23};
if ($scope.variable == null) {
alert("THIS IS MY ISSUE: SHOULD NOT BE NULL");
}
});
});
//SERVICE SHOULD ONLY HAVE EVENT THROWERS AND $ROOTSCOPE
app.service('TestApp', function ($rootScope) {
this.broadcastEventCalled = function () {
$rootScope.$broadcast("eventCalled");
};
this.onEventCalled = function (scope, callback) {
return scope.$on('eventCalled', function () {
callback();
});
};
});
希望它有所帮助!