2015-05-04 76 views
0

我的控制器在其范围内声明一个变量。我希望这个变量可以在$ rootScope。$内部访问,但似乎并非如此。这是我的问题。控制器和服务之间的事件处理范围


这是我的控制器

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"); 
    } 
}); 

输出

“这是我的问题:不应为null”

我应该改变,以确保$ scope.variable为$ rootScope内可达$上?

回答

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(); 
     }); 
    }; 
}); 

希望它有帮助!

相关问题