Angularjs无法从指令访问父作用域函数

时间:2014-05-20 10:57:33

标签: angularjs scope parent

我无法从隔离范围获取父函数调用。此代码的目的是创建一个可在同一页面上多次使用的widget指令...我尝试了其他一些选项,但没有工作要么。它使用父作用域。 我在这里错过了什么。

var app = angular.module("winApp", []);

app.controller("winCtrl", function($scope, dataFactory) {

    $scope.getData = function() {

        dataFactory.get('accounts.json').then(
                function(data) {
                    $scope.items = data;
                });
    };
});

app.directive("windowSmall", function() {
    return {

        restrict : 'EA',
        replace : 'true',
        scope : {
            type : '&'
        },

        transclude: 'true',

        templateUrl : 'windowtemplate.html',
        link : function(scope, element, attrs) {

            element.bind("load", function(){
                console.log(attrs.type);

                if (angular.equals(attrs.type, 'getData()')) {
                    scope.active = 'accounts';
                    console.log(attrs.type);

                    // scope.getData();

                    scope.$apply(function() {
                        scope.$eval(attrs.type);
                    }); 
                }
            });
        }
    };
});

app.factory('dataFactory', function($http) {
    return {
        get : function(url) {
            return $http.get(url).then(function(resp) {
                return resp.data;
            });
        }
    };
});

HTML:

     <div ng-app="winApp" ng-controller="winCtrl">

      <window-small type = "getData()">  </window-small>

     <br> <br>
     <!-- 
        <window-small type = "bulletin"> </window-small>    -->

2 个答案:

答案 0 :(得分:0)

您还可以使用 $ rootScope 获取完整的校对解决方案。由于应用程序可以有多个父项但只有一个 $ rootScope

https://docs.angularjs.org/api/ng/service/$rootScope

答案 1 :(得分:0)

将链接功能替换为:

link:function(scope,element,attrs){

        element.bind("load", function(){
            console.log(attrs.type);

            if (angular.equals(attrs.type, 'getData()')) {
                scope.active = 'accounts';
                console.log(attrs.type);
                scope.type();
            }
        });
    }

小提琴:http://jsfiddle.net/X7Fjm/3/