我在设置formSubmit时尝试创建服务。
例如。在控制器A中,我调用" service.setFormSubmit(doThis(obj))"在控制器B中,我调用" service.getFormSubmit()"。它将在控制器B中执行函数doThis(obj)。
更新 - 重新制定的问题。
我有1个视图,我想编辑或创建一个类别。这意味着我需要动态的ng-submit。我想在控制器中这个。像这样:
$scope.editCategory = function(obj) {
$scope.formSubmit = 'editCategory'
}
在创建时我想将formSubmit var更改为createCategory。 所以我可以在创建和编辑类别之间做出改变。
这可能吗?如果有人有办法做到这一点真的很好..!
提前致谢!
答案 0 :(得分:1)
使用该服务直接在控制器之间共享功能,而不是传递需要评估的字符串。
这项服务很简单:
.factory('MyService', function(){
var service = {};
return service;
});
一旦注入并分配给两个控制器中的范围变量,就会有一个中间单元,可以作为跨控制器协作的可修改通道。
.controller('FirstController', function($scope, MyService){
$scope.service = MyService;
})
.controller('SecondController', function($scope, MyService){
$scope.service = MyService;
$scope.service.create = function(obj){
console.log('Creating');
}
$scope.service.edit = function(obj){
console.log('Editing');
}
})
在FirstController
的范围内,您现在可以在SecondController
的范围内调用该函数:
<div ng-controller="FirstController">
<input type="checkbox" ng-model="button.type"> Toggle create/edit<br/>
<button ng-if="button.type" ng-click="service.create(obj)">Create</button>
<button ng-if="!button.type" ng-click="service.edit(obj)">Edit</button>
</div>
答案 1 :(得分:0)
如果您没有重新加载页面,则可以在服务中创建封装变量。您的set调用将分配传递给该变量的值,并且您的get调用将该变量返回给调用者。
我实现传递数据的一种方法是使用服务提交表单并将Json结果返回给服务。将Json对象存储在返回的封装变量中,然后将成功或失败传递给控制器。成功后,让控制器重定向视图,该视图将使用角度路由和ng-view重定向。一旦新视图与新控制器一起加载到页面中,您就可以调用服务中的变量来检索下一个控制器上的数据。
示例代码:
app.factory('service', function ($q, $http) {
var savedData;
return {
loadData: function() {
return data;
},
search: function (parameters) {
var searchURL = '/MVCController/Search?parameter1=' + parameters.one +
'¶meter2=' + parameters.two;
var deferred = $q.defer();
$http.get(searchURL).success(function (data) {
savedData = data;
deferred.resolve(true);
}).error(function(data) {
data = 'An error occurred while searching: ' + data;
savedData = data //(if you want to save the error)
deferred.reject(data);
});
return deferred.promise;
}
}
});