我遇到了一些我想在AngularJS中尝试做的事情。 事情是这样的:
我有一个控制器,我有一个如下定义的指令:
helpers.directive('someEvent', function() {
...
scope: {
api: '='
}
...
controller: ['$scope', function($scope) {
$scope.hasSomeEventOccured = function(){
return booleanVariable
};
$scope.api = {
hasSomeEventOccured: $scope.hasSomeEventOccured
}
}]
});
然后,在其他一些控制器中我想访问该函数hasSomeEventOccured
...
控制器定义如下:
moduleName.controller('moduleSomethingController',
['$scope', '$state', 'moduleRepository', function ($scope, $state, moduleRepository) {
$scope.theEventOccured = $scope.someEventApi.hasSomeEventOccured();
}]);
在cshtml文件中我有:
<some-event api="someEventApi" ></some-event>
<div ng-if="theEventOccured"></div>
偶尔发生的错误是$scope.someEventApi
未定义。
所以这一行断开: $scope.theEventOccured = $scope.someEventApi.hasSomeEventOccured();
我认为这是因为hasSomeEventOccured
内moduleSomethingController
的调用发生在someEvent
绑定完成之前。
我的问题是你如何解决这个问题?
我知道在指令中你会有类似的东西:
link: function(scope, element, attrs) {
attrs.$observe(...);
}
但是我怎样才能在我的情况下实现等待绑定完成的事情呢?
答案 0 :(得分:0)
SO-您得到的原因&#34; $ scope.someEventApi未定义&#34;错误,是因为你没有在任何地方设置它。它是未定义的!您在控制器中使用的所有内容都应该定义(var x = something ...)或者注入(就像在示例中注入$ scope)
我看到它的方式,你有两种方法可以得到你想要的东西:
scope: {theEventOccured: '&' }
:
$scope.theEventOccured = function() { /* your code here */ }
这种方式 - API实际上是在控制器内定义的,指令在需要时使用它。
对于更复杂的东西 - 你可以创建一个.factory并将它绑定到你的控制器和指令。
如果您尝试在不同的控制器(或指令的控制器)之间进行通信,您可以使用工厂或$ broadcast事件。请参阅the scope api