AngularJS:哪种方法可以将参数传递给模态控制器?

时间:2017-04-28 16:06:50

标签: angularjs angularjs-controller angular-ui-modal

我已经看到了两种将参数传递给AngularJS Modal的方法,一种是通过resolve绑定,另一种是通过scope绑定。我想知道一个人是否比另一个好,为什么?

解决绑定

$modal.open({

      templateUrl: 'partials.html',
      controller: 'MyCtrl',
      resolve: {
         someData: function(){
             return 'Some Data';
         }
      }
})
.controller('MyCtrl',function(someData){

     console.log(someData); // prints Some Data
})

范围绑定

var scope = $rootScope.$new();
scope.someData = 'Some Data';

$modal.open({

      templateUrl: 'partials.html',
      controller: 'MyCtrl',
      scope: scope
})
.controller('MyCtrl',function($scope){

     console.log($scope.someData); // prints Some Data
})

1 个答案:

答案 0 :(得分:1)

在这种情况下,

解析不被视为绑定。 当$modal.open通过解析将值传递给控制器​​时。这意味着如果更改父控制器中的值,则模态将不会更新,除非它重新初始化。 但是,您可以通过解析传递promise,这意味着如果您正在等待从服务器返回的数据,则使用resolve可以在数据返回之前阻止模式加载。

resolve: {
  someData: function() {
    return $http.get('someurl');
  }
}

优点&缺点

  
      
  • 异步运行代码
  •   
  • 较慢(如果使用承诺)
  •   
  • 不与父范围值绑定
  •   

范围绑定将允许您拥有单向绑定数据,只要父范围中的数据更新,模态中的值可以同时更新它的值。

优点&缺点

  
      
  • 更快
  •   
  • 使用父范围值绑定
  •   
  • 如果改变模态控制器中的值,可能会产生范围污染
  •