Javascript 传递的角度UI模式数据为空
我试图让一个角度引导UI模式(0.14)正常工作。我可以让模态弹出(很好),但是我传递的数据对象是null(设置它时它不是null)。我看过各种各样的plukner,我看到它们是如何工作的,而我的没有;好像不行 下面,我已经操纵它来传递一些虚构的数据Javascript 传递的角度UI模式数据为空,javascript,angularjs,angular-ui-bootstrap,Javascript,Angularjs,Angular Ui Bootstrap,我试图让一个角度引导UI模式(0.14)正常工作。我可以让模态弹出(很好),但是我传递的数据对象是null(设置它时它不是null)。我看过各种各样的plukner,我看到它们是如何工作的,而我的没有;好像不行 下面,我已经操纵它来传递一些虚构的数据 (function () { 'use strict'; angular.module('MPAapp') .contr
(function () {
'use strict';
angular.module('MPAapp')
.controller('workCentreCtrl',
['$scope', '$rootScope', 'toastrFactory', 'workCentreResource', '$uibModal', '$log',
workCentreCtrl])
function workCentreCtrl($scope, $rootScope, toastrFactory, workCentreResource, $uibModal, $log) {
var scope = this;
var slot = [{'slot1':5}, {'slotname':'dynamo'},{'OriginalSlot':5}]
var max = 5
// Click event from the view
$scope.EditWorkOrder = function () {
var modalInstance = $uibModal.open({
animation: true,
templateUrl: '/app/WorkOrder/Views/EditWorkOrder.html',
controller: 'EditWorkOrderCtrl',
size: 'lg',
resolve: {
data: function () {
return{
Slot: slot,
Max: max
}
}
}
});
modalInstance.result.then(function () {
$log.info('do some UI update here');
}, function () {
$log.info('Modal dismissed at: ' + new Date());
});
};
}
}());
/* END PARENT CONTROLLER */
/* --------------------------------*/
/* MODAL INSANCE CONTROLLER BEGIN*/
(function () {
'use strict';
angular.module('MPAapp')
.controller('EditWorkOrderCtrl', ['$scope', '$timeout', 'toastrFactory',
EditWorkOrderCtrl]);
EditWorkOrderCtrl.$inject = ['$uibModalInstance', 'data']
function EditWorkOrderCtrl($scope, $timeout, toastrFactory, $uibModalInstance, data) {
var scope = this;
$scope.ok = function () {
$uibModalInstance.close(scope.Slot);
};
$scope.cancel = function () {
$uibModalInstance.dismiss('cancel');
};
// THIS IS WHEN DATA IS UNDEFINED.
scope.Slot = data.Slot;
scope.SlotNumber = data.Slot.OriginalSlot;
}
}());
以及模态实例中的HTML
<div ng-controller="EditWorkOrderCtrl as vm">
<div class="row">
<div class="col-md-12">
<h2>Edit Work Order {{vm.Slot.WorkOrderNumber}}</h2>
</div>
</div>
<div class="row">
<div class="col-md-12"><span class="main-text bold">Product:</span> {{vm.Slot.ProductCode}} - {{vm.Slot.ProductDescription}}</div>
</div>
<div class="row">
<div class="col-md-6">
<span class="main-text bold">Size:</span> {{vm.Slot.QuantityRequired}}
<span class="main-text bold">Time (mins):</span> {{vm.Slot.StandardRunTime}}
<span class="main-text bold">Current Date:</span>{{vm.Slot.OriginalOrderDate | date:'dd MMM yyyy'}}
</div>
<div class="col-md-6"></div>
</div>
</div>
编辑工单{{vm.Slot.WorkOrderNumber}
产品:{{vm.Slot.ProductCode}-{{vm.Slot.ProductDescription}
大小:{{vm.Slot.QuantityRequired}
时间(分钟):{vm.Slot.StandardRunTime}
当前日期:{{vm.Slot.OriginalOrderDate}日期:'dd MMM yyyy'}
非常感谢您的帮助。我对Angular还是个新手,在某些领域,这是一个难题,但我喜欢它 当然
数据
不会像这样可用(但它不是空的
,而是未定义的
)。你的依赖注入搞砸了。注意,您在$inject
数组中描述的内容必须与传递给控制器函数的形式参数相对应
在使用此配置的情况下:
EditWorkOrderCtrl.$inject = ['$uibModalInstance', 'data']
function EditWorkOrderCtrl($scope, $timeout, toastrFactory, $uibModalInstance, data) {}
您告诉Angular将$uibModalInstance
作为$scope
注入,并将数据作为$timeout
注入。显然不是你想要的
正确的注射应该像
EditWorkOrderCtrl.$inject = ['$scope', '$timeout', 'toastrFactory', '$uibModalInstance', 'data'];
function EditWorkOrderCtrl($scope, $timeout, toastrFactory, $uibModalInstance, data) {}
或者,您可以使用数组表示法作为控制器定义:
.controller('EditWorkOrderCtrl', ['$scope', '$timeout', 'toastrFactory', 'workCentreResource', 'blockedDatesResource', 'data', EditWorkOrderCtrl]);
但在这种情况下,请确保不要使用EditWorkOrderCtrl.$inject=['$uibModalInstance']
。删除它,因为它有更高的优先级,正如我上面解释的,它是混乱的
还可以看看这个,我在这里提供了关于不同注入方法的详细解释。我没有尝试,但是如果在控制器定义中包含“数据”,并将其从设置为EditWorkOrderCtrl的数组中删除,会怎么样。$inject?正是我要说的。有$inject的东西看起来很有趣。遗憾的是,它仍然是空的。这就是它现在的设置方式。控制器('EditWorkOrderCtrl'、['$scope'、'$timeout'、'toastrFactory'、'WorkcenterResource'、'blockedDatesResource'、'data',EditWorkOrderCtrl]);EditWorkOrderCtrl.$inject=['$uibModalInstance']函数EditWorkOrderCtrl($scope、$timeout、toastrFactory、workCentreResource、blockedDatesResource、$uibModalInstance、data){var scope=this;scope.Slot=data.Slot;感谢这个指针,我不会再这样做了,是的,它是未定义的。这是我的controller.controller('EditWorkOrderCtrl',['$scope','$timeout','toastrFactory','WorkCentrerSource','blockedDatesResource','data',EditWorkOrderCtrl]);函数EditWorkOrderCtrl($scope,$timeout,toastrFactory,workcenteresource,blockedDatesResource,data,$uibModalInstance){var scope=this;…}}();现在我在数组中得到一个关于数据对象的错误。bold[$injector:unpr]未知提供程序:数据提供程序Removeng controller=“EditWorkOrderCtrl as vm”
从HTML模板中,您不需要它,因为模板已经绑定到模式配置中的控制器。然后,如果您需要vm
前缀,请将controllerAs:'vm'
添加到模式配置中。您这个小美人@dfsq,完成了。我想这是我唯一没有尝试过的事情了!谢谢。