Javascript 角度模态解析

Javascript 角度模态解析,javascript,angularjs,angular-ui,angular-ui-bootstrap,Javascript,Angularjs,Angular Ui,Angular Ui Bootstrap,亲爱的各位,我对Angularjs是新手,我正在尝试创建一个模式。 我在网上找到的一个例子(目前也在后面),就是下面这个,我觉得很难理解 $scope.checkout=函数(cartObj){ var modalInstance=$modal.open({ templateUrl:'assets/menu/Directions/payment processing modal.tmpl.html', 控制器:[“$scope”,“$modalInstance”,“cartObj”,函数($sc

亲爱的各位,我对Angularjs是新手,我正在尝试创建一个模式。 我在网上找到的一个例子(目前也在后面),就是下面这个,我觉得很难理解

$scope.checkout=函数(cartObj){
var modalInstance=$modal.open({
templateUrl:'assets/menu/Directions/payment processing modal.tmpl.html',
控制器:[“$scope”,“$modalInstance”,“cartObj”,函数($scope,$modalInstance,cartObj){
}],
解析:{//在控制器加载和呈现模板之前触发此操作
cartObj:function(){
返回cartObj;
}
}
});

我感到困惑的是,我已经收到的作为函数参数的cartObj是通过依赖项注入传递给我的控制器的。但是,为什么我必须创建一个名为cartObj的函数并返回该变量。这似乎令人困惑。有人能帮我吗?

以下是逐行细分:

$scope.checkout = function (cartObj) {
正在创建一个名为checkout的$scope变量,该变量引用一个函数,以便您可以在视图中将其调用为
checkout()
(例如,通过带有ng click=“checkout”的按钮)

此函数通过一个名为cartObj的服务传递

var modalInstance = $modal.open({
名为modalInstance的变量用于调用$modal service open方法

UI引导$modal服务返回一个模态实例。open方法被传递一个对象,该对象定义模态实例配置,如下所示:

templateUrl : 'assets/menu/directives/payment-processing-modal.tmpl.html',
这意味着模态实例应该使用在相应url处找到的模板

controller : ["$scope", "$modalInstance", "cartObj", function($scope, $modalInstance, cartObj) {
  }],
这将为传递给$scope、$modalInstance服务以及重要的是解析的cartObj服务的模态实例创建一个控制器

服务是用于在控制器之间共享数据的单例。这意味着存在一个版本的cartObj服务,如果一个控制器更新了它,另一个控制器可以查询该服务并获取由任何其他控制器更新的数据。这很好,但是如果需要使用t中的某个值初始化变量当控制器加载服务时,它将返回未定义的服务,因为它必须先请求,然后等待数据返回。这就是解析的意义所在:

  resolve : { // This fires up before controller loads and templates rendered
    cartObj : function() {
       return cartObj;
    }
  }
});
这里使用resolve的原因可能是因为模板本身依赖于加载模板时来自cartObj的一些数据。resolve将在控制器加载之前解析承诺,以便在控制器加载时,数据在那里并准备就绪。基本上,resolve简化了内部模型的初始化一个控制器,因为初始数据被提供给控制器,而不是控制器需要出去获取数据


解析的cartObj是传递给modalInstance的对象,因此可以在控制器中作为:cartObj.someproperty进行访问。

这是错误的:
使用名为modalInstance的变量调用$modal service open方法。
调用
$modal
服务的
open()
方法返回模态实例,该实例存储在
modalInstance
变量中。我发现只有在modal.open调用中而不是在模板中定义控制器时,此方法才有效