Angular-UI模态解析

时间:2015-05-17 18:09:08

标签: javascript angularjs angular-ui angular-ui-bootstrap

亲爱的所有我是Angularjs的新手我正在使用Angular创建一个模态。我在网上发现的一个例子是我很难理解

<div class="input-group input-group-lg"> <span class="input-group-addon"></span>

<input type="text" class="form-control text-center" id="playername" placeholder="Enter Your Name" />
<input type="text" class="form-control text-center" id="room" maxlength="4" placeholder="Enter Room Code" /> <span class="input-group-addon btn"><strong>Play!</strong></span>

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

1 个答案:

答案 0 :(得分:29)

这是逐行细分:

$scope.checkout = function (cartObj) {

正在创建一个名为checkout的$ scope变量,它引用一个函数,以便您可以在视图中将其作为checkout()调用(例如,使用ng-click =&#34; checkout&#34; )。

此功能通过名为cartObj的服务传递。

var modalInstance = $modal.open({

一个名为modalInstance的变量用于调用$ modal service open方法。

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

templateUrl : 'assets/menu/directives/payment-processing-modal.tmpl.html',

这表示模态实例应该使用在相应网址上找到的模板。

controller : ["$scope", "$modalInstance", "cartObj", function($scope, $modalInstance, cartObj) {
  }],

这将为传递$ scope,$ modalInstance服务以及重要的已解决的cartObj服务的模式实例创建一个控制器。

服务是用于跨控制器共享数据的单例。这意味着有一个版本的cartObj服务,如果一个控制器更新它,另一个控制器可以查询服务并获取由任何其他控制器更新的数据。这很好,但是如果一个变量需要在控制器加载时从服务中初始化一些值,它将返回undefined,因为它必须首先请求然后等待获取数据。这就是解决问题的地方:

  resolve : { // This fires up before controller loads and templates rendered
    cartObj : function() {
       return cartObj;
    }
  }
});

使用resolve的原因可能是因为模板本身依赖于加载模板时cartObj中的某些数据。 Resolve将在控制器加载之前解析承诺,以便在它执行时,数据就绪并准备就绪。基本上,resolve简化了控制器内部模型的初始化,因为初始数据是给控制器的,而不是控制器需要外出并获取数据。

已解析的cartObj是传递给modalInstance的内容,因此可以在控制器中访问:cartObj。 someproperty