我已经看到了两种将参数传递给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
})
答案 0 :(得分:1)
解析不被视为绑定。
当$modal.open
通过解析将值传递给控制器时。这意味着如果更改父控制器中的值,则模态将不会更新,除非它重新初始化。
但是,您可以通过解析传递promise,这意味着如果您正在等待从服务器返回的数据,则使用resolve可以在数据返回之前阻止模式加载。
resolve: {
someData: function() {
return $http.get('someurl');
}
}
优点&缺点
- 异步运行代码
- 较慢(如果使用承诺)
- 不与父范围值绑定
范围绑定将允许您拥有单向绑定数据,只要父范围中的数据更新,模态中的值可以同时更新它的值。
优点&缺点
- 更快
- 使用父范围值绑定
- 如果改变模态控制器中的值,可能会产生范围污染