Javascript 角度控制器可以';看不到指令中声明的函数

Javascript 角度控制器可以';看不到指令中声明的函数,javascript,angularjs,Javascript,Angularjs,以下是html: <div class="col-lg-8" ng-controller="usersCtrl"> <scrollable height="180" ts-attach-spinner class="list-group"> </scrollable> </div> 这是控制器: (function () { 'use strict'; angular .module('angle')

以下是html:

<div class="col-lg-8" ng-controller="usersCtrl">
<scrollable height="180" ts-attach-spinner class="list-group">
</scrollable>
</div>
这是控制器:

(function () {
    'use strict';

    angular
        .module('angle')
        .controller('usersCtrl', usersCtrl);

    usersCtrl.$inject = ['$scope', 'usersSvc'];

    function usersCtrl($scope, usersSvc) {
        $scope.title = 'Users';
        activate();

        function activate() {
            var promises = [getUsers()];
            $scope.spin(promises);
        }

        function getUsers() {
            return usersSvc.getUsers().then(function (data) {
                return $scope.users = data;
            });
        }
    }
})();
如您所见,我声明了spin函数并将其附加到ts attach spinner指令中的作用域。然而,当我在控制器中调用
$scope.spin
时,我得到了“未定义的不是函数”


感谢您的建议。

假设
是另一个指令,这是在创建新的范围吗?如果是这样,那就是你的问题了,这个函数被定义在一个不同的作用域上,而不是与控制器关联的作用域上。另外,我认为控制器可能不应该调用指令中定义的函数。我相信还有很多其他方法,我想到的一个简单方法是控制器
$broadcast()
一个事件,并让指令侦听该事件。这将解决手头的问题,好处是不会让你自食其果。你想使用隔离作用域“&”,你可以将你的函数作为属性添加到element@Dylan你能详细说明一下吗?我不明白。这里有一个很好的视频-@SunilD。谢谢这是有道理的。为什么它会朝我自己开枪?
(function () {
    'use strict';

    angular
        .module('angle')
        .controller('usersCtrl', usersCtrl);

    usersCtrl.$inject = ['$scope', 'usersSvc'];

    function usersCtrl($scope, usersSvc) {
        $scope.title = 'Users';
        activate();

        function activate() {
            var promises = [getUsers()];
            $scope.spin(promises);
        }

        function getUsers() {
            return usersSvc.getUsers().then(function (data) {
                return $scope.users = data;
            });
        }
    }
})();