使用ui.grid与cellTemplate共享$scope
Sharing $scope with cellTemplate using ui.grid
我正在使用ui.grid来获取零件列表。我创建了一个列,其中包含一个启动模态的按钮。我遇到的问题是共享行中包含的部分的范围。我想和我正在使用cellTemplate创建的按钮共享该行的属性。然后,我想与它将要启动的模态共享部件行的$scope。
我有点困惑于如何真正做到这一点。
到目前为止,我已经尝试过
•在我想要瞄准的按钮周围缠绕一个ng重复。这种方法很有效,但会使应用程序速度变慢•通过ng类在按钮上绑定数据。我似乎不能正确地针对这一点。
如何将通过$http.get接收到的对象的$scope与使用cellTemplate创建的元素共享到ui.grid中?
免责声明——我总是使用controllerAs语法,所以如果在HTML上下文中引用控制器对你来说很奇怪,那么忽略这一部分,假装你直接在作用域上设置了方法。我也用Typescript做所有的事情,而不是Javascript,所以我将在这里编写代码的相关部分。它们应该很容易插入到您的应用程序中。
答案是你已经从Sunil和S.Baggy那里得到的两个答案的组合。
您想要做的是使用getExternalScopes()函数,并将一些内容附加到网格所在的HTML范围中。你交给网格的东西会出现在这一行,并调用你的模式弹出窗口。请参阅下面的说明。
您的HTML-
<div ng-controller="MyController as myController">
<div ui-grid="myController.GridObject" external-scopes="myController"></div>
</div>
通过使用controllerAs语法并使控制器成为外部作用域中的引用,我们现在可以访问控制器中的所有内容。因此,我们可以在其中调用方法。然而,为了做到这一点,我们必须使用cellTemplate,听起来你已经知道如何做了,在该cellTemplate中,我们必须具有以下内容:
ng单击="getExternalScopes().methodToLaunchModal()"
现在,连接所有这些的最后一部分是将methodToLaunchModal()方法写入控制器。为此,我们借用了S.Baggy的答案。这是一个非常缩写的控制器,带有GridObject(与我在上面的控制器中引用的相同):
app.controller('MainCtrl', function($scope, $modal) {
GridObject = {
... setup of all the other things
columnDefs: [{ etc, etc, }, { etc, cellTemplate: '<div ng-click="getExternalScopes().methodToLaunchModal(row.entity)">whatever</div>' }]
};
methodToLaunchModal: function(row) {
var modalInstance = $modal.open({
templateUrl: 'someTemplate',
controller: 'ModalController',
resolve: {
rowObject: function () { return row; }
}
});
};
});
此时,您的模态作用域将具有一个名为rowObject的对象,该对象将具有行中的所有属性。因此,您应该能够调用rowObject.SomeProperty来获取其值。
如果任何语法稍有错误,我们深表歉意。
我使用bootstrap$modal指令,代码如下。。。
clickFunction: function (event, row) {
event.stopPropagation(); // prevents the current row from appearing as selected
var modalInstance = $modal.open({
templateUrl: 'views/modalcontent.tpl.html',
controller: 'ModalMessageController',
size: 'lg',
resolve: {
message: function () { return row.entity.serial_number; }
}
}
);
然后我只参考模板中的{{message}}
。当然,您也可以传递任何其他数据。
您可以使用外部范围在选择行或点击该行时访问行及其属性
ng-click="getExternalScopes().onRowClick(row)"
onRowClick: function (row) {
row.entity.Property1; /// and so on for all row properties
}
- AngularJS:ng之后,重复$scope值未按预期更新
- Facebook共享显示一个接一个的空白页面
- $ionicplatform内的$scope不;不起作用
- 通过javascript/html访问twitter共享iframe
- 在我的SPA应用程序中集成Facebook共享的问题
- 使用$scope方法时的ControllerAs语法
- 在索引.html和应用.js [node.js] 之间共享变量
- AngularJS:$q.dedefe()不能由工厂方法共享
- 如何将ngrepeat下的ngmodel绑定到$scope
- 另一个if(!$scope.$$phase)$scope$apply()szenario-需要帮助才能通关
- 使用AngularJS Directive WHITOUT$scope创建一个动态html元素
- 使用ui.grid与cellTemplate共享$scope
- 在 2 个不同的功能之间共享 $scope.数据
- AngularJs 在控制器和控制器之间共享$scope
- 如何与AngularJs在控制器之间共享$scope,我们可以从另一个控制器访问一个控制器的$scope
- 在指令作用域和控制器$scope之间共享数据
- 在angularjs $scope中使用JavaScript对象,并在控制器之间共享它们
- 如何管理ui-router或在不同的$state中共享$scope
- 如何在angularjs中的两个控制器之间共享$scope属性,而不是其值
- 如何在多个控制器之间共享$scope对象