AngularJS - 从嵌入的指令范围内的函数更新父控制器范围内的变量
AngularJS - Updating variables within the parent controller scope from a function in a transcluded directive scope
父控制器作用域变量如何从嵌入指令作用域的函数中更新?
我通过以下方式使用包含将指令嵌入到另一个指令中:
<my-table>
<my-getter-button></my-getter-button>
</my-table>
我的-table 和我的-getter-按钮的代码如下:
my-table
模板:
<table>
<tr ng-repeat="item in items">
<td data-id="{{item.Id}}" ng-transclude></td>
</tr>
</table>
my-table
指令:
.directive('myTable', function () {
return {
transclude: true,
restrict: 'E',
templateUrl: 'views/mytable.html',
scope: false
};
});
my-getter-button
指令(带模板):
app.directive('myGetterButton', function () {
function link(scope, element) {
scope.finalizeGet = function () {
var id = element.parent().data('id');
scope.clear(); // <-- works fine (from parent controller)
scope.get(id) // <-- works fine (from parent controller)
.success(function (data) {
// The line below was supposed to
// update the variables within the parent controller:
scope.$parent.instance = data; // or scope.instance = data;
angular.element('#detailsModal').modal('show');
})
.error(function (data) {
scope.errors = data;
});
};
};
return {
restrict: 'E',
template: '<button class="btn btn-info" ng-click="finalizeGet()">' +
'<span class="glyphicon glyphicon-book"></span>' +
'</button>',
scope: false,
link: link
};
});
我期待 scope.$parent.instance = data; // or scope.instance = data;
更改父控制器的 scope.instance
但它没有。
我找到了解决我自己问题的方法。
原来我需要的是 setter 函数。
我在控制器中添加了以下内容:
// Set current model instance of scope.
$scope.setInstance = function(data) {
$scope.instance = data;
};
并调用了setter函数(而不是有赋值操作),如下:
// ...
.success(function (data) {
scope.setInstance(data);
angular.element('#detailsModal').modal('show');
})
// ...
它更新了父控制器范围内的变量。
父控制器作用域变量如何从嵌入指令作用域的函数中更新?
我通过以下方式使用包含将指令嵌入到另一个指令中:
<my-table>
<my-getter-button></my-getter-button>
</my-table>
我的-table 和我的-getter-按钮的代码如下:
my-table
模板:
<table>
<tr ng-repeat="item in items">
<td data-id="{{item.Id}}" ng-transclude></td>
</tr>
</table>
my-table
指令:
.directive('myTable', function () {
return {
transclude: true,
restrict: 'E',
templateUrl: 'views/mytable.html',
scope: false
};
});
my-getter-button
指令(带模板):
app.directive('myGetterButton', function () {
function link(scope, element) {
scope.finalizeGet = function () {
var id = element.parent().data('id');
scope.clear(); // <-- works fine (from parent controller)
scope.get(id) // <-- works fine (from parent controller)
.success(function (data) {
// The line below was supposed to
// update the variables within the parent controller:
scope.$parent.instance = data; // or scope.instance = data;
angular.element('#detailsModal').modal('show');
})
.error(function (data) {
scope.errors = data;
});
};
};
return {
restrict: 'E',
template: '<button class="btn btn-info" ng-click="finalizeGet()">' +
'<span class="glyphicon glyphicon-book"></span>' +
'</button>',
scope: false,
link: link
};
});
我期待 scope.$parent.instance = data; // or scope.instance = data;
更改父控制器的 scope.instance
但它没有。
我找到了解决我自己问题的方法。 原来我需要的是 setter 函数。 我在控制器中添加了以下内容:
// Set current model instance of scope.
$scope.setInstance = function(data) {
$scope.instance = data;
};
并调用了setter函数(而不是有赋值操作),如下:
// ...
.success(function (data) {
scope.setInstance(data);
angular.element('#detailsModal').modal('show');
})
// ...
它更新了父控制器范围内的变量。