定义角度服务和控制器 - 视图之间不存在数据

时间:2015-03-27 21:52:39

标签: angularjs data-binding service controller persistence

我希望将角度控制器和服务分开。

当前路径:

project/client/js/controllers/product-controller.js

project/client/js/services/editProduct-service.js

请参阅以下要点:

https://gist.github.com/astemborskim/4673d024d5a78347fae8

我最初的问题是我是否应该在识别服务的html中添加源代码。我的印象是你只需要在HTML视图中定义控制器。

我的理解是我的app.js被定义为:

var app = angular.module('warehouseApp', ['ngResource']);

然后使用 app .controller和服务将我的控制器定义为 app .service。

我应该可以在我的初始html视图(jade布局)中执行此操作app.js被定义为我所有视图的src:

脚本(text =' text / javascript' src =" /app.js")

docutype 
html(ng-app='warehouseApp')
    head
        script( src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.13/angular.js")
        script( src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.13/angular-resource.js")
        script( text='text/javascript' src="/app.js")
        link( rel="stylesheet" href="/css/style.css" type="text/css" media="Screen")
        link( rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css")
        title Acme Warehouse - #{title}
        block navigation
    body.container-fluid
        div
            block heading
            block content
    footer
        block footer

然而,我的服务,即使我认为它在我的控制器中正确引用,也不会起作用,除非我将服务/工厂包含在同一个文件中,或者我在视图中将服务引用为src。

示例:

script(text="text/javascript", src="../js/controllers/test-controller.js")
script(text="text/javascript", src="../js/services/editProduct-service.js")

CONTROLLER 1:

app.controller('productController', ['$scope', '$resource', 'editProductService', function ($scope, $resource, editProductService) { 

    $scope.setEditProduct = function (product){

    editProductService.saveProductForEdit(product);
    console.log(product);

}


}]);

CONTROLLER 2:

app.controller('testController', ['$scope', '$resource', 'editProductService', 
function ($scope, $resource, editProductService) {

    $scope.editProd={};

    $scope.getEditProduct = function (){

    $scope.editProd = editProductService.getProductForEdit();
    console.log($scope.editProd);
}


}]);

主要问题是我的2个控制器之间没有持久的数据。我通过控制器1在我的服务中设置的数据对象在控制器2中是未定义的。我认为这是因为我在我的html中调用服务作为源。加载视图时,它会将我的服务变量重新定义为空对象。

你同意吗?

将我的服务注入控制器的正确方法是什么?难道他们不能通过app.js中的共享app变量互相引用吗?

我试图在一个视图中创建表单数据在另一个视图中以另一种形式显示。

提前致谢。

0 个答案:

没有答案