【发布时间】:2015-04-08 13:47:39
【问题描述】:
所以我有这个指令,它有自己的范围,但我想访问其父控制器内的函数。如果父控制器使用 $scope.getElementsList() 公开函数,我可以这样做,尽管我试图避免使用 $scope,并且我有使用 self.getElementsList() 公开的函数并且指令无法访问它.
指令:
angular.module('myApp').directive('accountBalance', function() {
return {
scope: {
elementId: '=elementid'
},
transclude: true,
restrict: 'E',
templateUrl: '../views_directives/account-balance.html',
controller: function($scope) {
$scope.removeElement = function(){
//this where I want to access the parent function
console.log($scope.$parent.getElementsList());
console.log("ALSO I WANT TO ACCESS THIS DIRECTIVE elementId WITHOUT USING $scope", $scope.elementId);
}
}
};
});
父控制器:
angular.module('myApp').controller('AppDesignCtrl', function ($scope) {
var self = this;
self.elementsList = [];
self.getElementsList = function(){
return self.elementsList;
}
});
我还想知道在指令控制器内部访问传递给指令 $scope 的数据的最佳方式是什么。
scope: {
elementId: '=elementid'
},
更新
<div>
<i class="fa fa-arrows element-drag"></i>
<i class="fa fa-trash-o element-remove" ng-click="removeElement()"></i>
</div>
那么从指令控制器内的指令模板调用函数呢?我需要用 $scope.removeElement() 之类的东西来公开它们吗?如何使用 this.removeElement() 并能够从模板中访问它?
抱歉这个问题太长了。自从我离开 Angular 一年多以来,我正在尝试为我的新项目设置最佳实践。
提前致谢
【问题讨论】:
-
您使用的是哪个版本的 Angular?在 1.2 和 1.3 之间,情况发生了很大变化。
-
你是如何使用你的指令的?
-
我正在使用最新版本“版本”:“1.3.15”@NikosParaskevopoulos
-
@Satpal -
您真的需要在隔离范围内以两种方式绑定 id 吗?如果它作为属性访问,则父控制器范围将在指令中公开
标签: javascript angularjs