让我说我有这个指令。我想从父控制器内部更改指令范围的变量。可能吗?或者这是执行我想要实现的目标的正确方法。
<div ng-show="devices.autocompletelist.length > 0" auto-complete url="/search" model="device.name" template-url="/themes/dashboard/assets/js/angular/filter/views/autocomplete-template.html" filtertype="device" autocompletelist="devices.autocompletelist"></div>
指令
angular.module('autocomplete.directives',[]).directive('autoComplete',['$http',function($http){
return {
scope:{
selectedTagsData:'=model',
autocompletelist: '='
},
restrict: 'AE',
templateUrl: function(elem, attrs) {
return attrs.templateUrl
},
link: function(scope, elem, attrs) {
// I want to access and change value of selectedTagsData.data from parent controller
scope.selectedTagsData = {
data: ''
}
},
}
}]);
应用
var app = angular.module('filterlist', ['autocomplete.directives']);
控制器
app.controller('filterCtrl', ['$rootScope', 'filterService', '$scope', '$compile', '$location', '$http', '$timeout', '$q',
function($rootScope, filterService, $scope, $compile, $location, $http, $timeout, $q) {
$scope.deviceSelect = function(devicedata) {
// Can I access and change value of directive scope variable 'scope.selectedTagsData.data' from here
}
}
]);
答案 0 :(得分:0)
如果你没有在你的指令中定义范围,那么所有$ scope控制器都将通过你的指令访问,但这不是完美的解决方案,因为你没有按照关注点分离和单一责任原则, 总结一下:你的指令不应该知道有关父作用域的任何信息,你的控制器也不应该知道有关指令内部的任何信息。它们是单独层中的独立组件。
我认为如果使用transclude
选项,它将解决您的问题,因为transclude使得带有此选项的指令的内容可以访问指令之外的范围而不是内部。