2015-12-02 56 views
0

好的,所以我有一個指令,它具有屬性並讀取它(並寫出它)。從指令的隔離控制器獲取屬性值

plunker現場演示:http://embed.plnkr.co/IkKPLahPc9yqeHWEQUG3/

我想這是因爲控制器:內部主directive.js這沒有什麼,而實際的行動是孤立的指令的控制器控制器內部發生的Ctrl鍵。

這裏是主directive.js

var app = angular.module('testapp.directive.main', ['main']); 

app.directive('myCustomer', function() { 

    var controller = ['$scope', function($scope) { 

    $scope.dan = { 'name': 'Chad', 'nationality': 'China' }; 
    // I want the scope.dan object to be read from here. 

    }]; 

    var template = 'Getting attribute value of =getInfo... {{getInfo.name}} from {{getInfo.nationality}}'; 

    return { 
    restrict: 'E', 
    controller: controller, 
    scope: { 
     getInfo: "=info" 
    }, 
    template: template 
    }; 
}); 

app.controller('ctrl', function($scope) { 
    // adding the $scope.dan object here will work 
    // but I don't want it here. 
}); 

,這裏是我爲它的模板:

'[email protected]': { 
    controller: 'MainCtrl as mainCtrl', 
    template: '<div ng-controller="ctrl"><my-customer info="dan"></my-customer></div>' 
} 

如何使它所以從隔離控制器內讀取的對象裏面的指令,而不是從控制器'ctrl'?

謝謝。

回答

0

看看這篇文章,它展示了指令和控制器如何共享$ scope。

Behavior of controller inside directives

看起來你有興趣給您的自定義HTML標記的自定義屬性。我重新格式化您的指令,並控制和打印出來的信息屬性,你似乎興趣。

var app = angular.module('testapp.directive.main', ['main']) 
    .directive('myCustomer', function() { 

    var template = 'Getting attribute value of =getInfo... {{getInfo.name}} from {{getInfo.nationality}}'; 

    return { 
    restrict: 'E', 
    controller: 'ctrl', 
    scope: { 
     getInfo: "=info" 
    }, 
    template: template 
    }; 
}) 
.controller('ctrl',['$scope', '$attrs', function($scope, $attrs) { 
    $scope.dan = { 'name': 'Chad', 'nationality': 'China' }; 
    console.log($attrs.info); 
}]) 

希望這有助於

+0

嗯..所有的原因,我有指令中分離出的控制器是爲單元測試。有這樣的控制器...它不會使它可重用,不是嗎? – red

+0

我不確定可重複使用的含義。對於Instance,你可以通過引用'controller:'ctrl''從任何指令中肯定地重用控制器。 – phix

+0

你說得對。我在想一個控制器是孤立的,它必須是INSIDE指令。 但是,它在指令中的目的是什麼?無論如何,謝謝。 – red