Angular-UI模态解析
Angular-UI Modal resolve
亲爱的,我是 Angularjs 的新手,我正在尝试创建一个模式。
下面是我在网上找到的一个例子(目前正在跟进),我觉得它很难理解。
$scope.checkout = function (cartObj) {
var modalInstance = $modal.open({
templateUrl : 'assets/menu/directives/payment-processing-modal.tmpl.html',
controller : ["$scope", "$modalInstance", "cartObj", function($scope, $modalInstance, cartObj) {
}],
resolve : { // This fires up before controller loads and templates rendered
cartObj : function() {
return cartObj;
}
}
});
我感到困惑的是 cartObj,我已经收到它作为我的函数的参数,它通过依赖项注入传递到我的控制器。但是,为什么我必须创建一个名为 cartObj 的函数和 return 该变量。看起来很混乱。有人可以帮忙吗?
这是逐行细分:
$scope.checkout = function (cartObj) {
正在创建一个名为 checkout 的 $scope 变量,它引用了一个函数,以便您可以在视图中以 checkout()
的形式调用它(例如从带有 ng-click="checkout" 的按钮) .
此函数传递给一个名为 cartObj 的 服务。
var modalInstance = $modal.open({
一个名为modalInstance的变量用于调用$modal服务打开方法。
UIBootstrap$modal 服务return是模态实例。 open 方法传递一个对象,该对象定义模态实例配置如下:
templateUrl : 'assets/menu/directives/payment-processing-modal.tmpl.html',
这表示模态实例应使用在相应 url 中找到的模板。
controller : ["$scope", "$modalInstance", "cartObj", function($scope, $modalInstance, cartObj) {
}],
这为通过 $scope、$modalInstance 服务以及重要的已解析的 cartObj 服务的模态实例创建了一个控制器。
服务是用于跨控制器共享数据的单例。这意味着有一个版本的 cartObj 服务,如果一个控制器更新它,另一个控制器可以查询该服务并获取由任何其他控制器更新的数据。这很好,但是如果在控制器加载时需要使用来自服务的某个值来初始化变量,它将 return undefined 因为它必须首先请求然后等待取回数据。这就是决心的来源:
resolve : { // This fires up before controller loads and templates rendered
cartObj : function() {
return cartObj;
}
}
});
此处使用 resolve 的原因可能是因为模板本身依赖于加载模板时可用的 cartObj 中的某些数据。 Resolve 将在控制器加载之前解决承诺,以便在加载时数据就在那里并准备就绪。基本上,resolve 简化了控制器内部模型的初始化,因为初始数据已提供给控制器,而不是控制器需要出去获取数据。
已解析的 cartObj 是传递给 modalInstance 的内容,因此可以在控制器中访问为:cartObj.someproperty。
亲爱的,我是 Angularjs 的新手,我正在尝试创建一个模式。 下面是我在网上找到的一个例子(目前正在跟进),我觉得它很难理解。
$scope.checkout = function (cartObj) {
var modalInstance = $modal.open({
templateUrl : 'assets/menu/directives/payment-processing-modal.tmpl.html',
controller : ["$scope", "$modalInstance", "cartObj", function($scope, $modalInstance, cartObj) {
}],
resolve : { // This fires up before controller loads and templates rendered
cartObj : function() {
return cartObj;
}
}
});
我感到困惑的是 cartObj,我已经收到它作为我的函数的参数,它通过依赖项注入传递到我的控制器。但是,为什么我必须创建一个名为 cartObj 的函数和 return 该变量。看起来很混乱。有人可以帮忙吗?
这是逐行细分:
$scope.checkout = function (cartObj) {
正在创建一个名为 checkout 的 $scope 变量,它引用了一个函数,以便您可以在视图中以 checkout()
的形式调用它(例如从带有 ng-click="checkout" 的按钮) .
此函数传递给一个名为 cartObj 的 服务。
var modalInstance = $modal.open({
一个名为modalInstance的变量用于调用$modal服务打开方法。
UIBootstrap$modal 服务return是模态实例。 open 方法传递一个对象,该对象定义模态实例配置如下:
templateUrl : 'assets/menu/directives/payment-processing-modal.tmpl.html',
这表示模态实例应使用在相应 url 中找到的模板。
controller : ["$scope", "$modalInstance", "cartObj", function($scope, $modalInstance, cartObj) {
}],
这为通过 $scope、$modalInstance 服务以及重要的已解析的 cartObj 服务的模态实例创建了一个控制器。
服务是用于跨控制器共享数据的单例。这意味着有一个版本的 cartObj 服务,如果一个控制器更新它,另一个控制器可以查询该服务并获取由任何其他控制器更新的数据。这很好,但是如果在控制器加载时需要使用来自服务的某个值来初始化变量,它将 return undefined 因为它必须首先请求然后等待取回数据。这就是决心的来源:
resolve : { // This fires up before controller loads and templates rendered
cartObj : function() {
return cartObj;
}
}
});
此处使用 resolve 的原因可能是因为模板本身依赖于加载模板时可用的 cartObj 中的某些数据。 Resolve 将在控制器加载之前解决承诺,以便在加载时数据就在那里并准备就绪。基本上,resolve 简化了控制器内部模型的初始化,因为初始数据已提供给控制器,而不是控制器需要出去获取数据。
已解析的 cartObj 是传递给 modalInstance 的内容,因此可以在控制器中访问为:cartObj.someproperty。