C# AngularJS服务进入控制器

C# AngularJS服务进入控制器,c#,angularjs,asp.net-web-api,ngresource,C#,Angularjs,Asp.net Web Api,Ngresource,我有以下代码抛出错误: 我的控制器代码: App.controller('SelectCustomerController', function SelectCustomerController($scope, $location, $resource, customerService) { //DO STUFF} }); 我注入了一个服务,它看起来像: App.factory('customerService', ['$resource', function ($resou

我有以下代码抛出错误: 我的控制器代码:

App.controller('SelectCustomerController',
    function SelectCustomerController($scope, $location, $resource, customerService) 
    { //DO STUFF}
});
我注入了一个服务,它看起来像:

App.factory('customerService', ['$resource', function ($resource) {
    return $resource('api/customerAPI')
}]);
服务对我的MVC webapi Get方法进行restful调用。 我的应用程序模块如下所示:

var tmPromise, App = angular.module('App', ['ngRoute', 'ui.bootstrap', 'angularUtils.directives.dirPagination', 'ngAnimate', 'ngResource'], function () {

});
以及我的布局,我在其中调用Bundle文件:

<!DOCTYPE html>
<html ng-app="App">
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
    @Styles.Render("~/Content/css")
    @Styles.Render("~/Content/m")
    @Scripts.Render("~/bundles/modernizr")
</head>
<body style="background-color:x#383838;">
    <div class="container body-content">
        @RenderBody()
        <hr />
        <footer>

        </footer>
    </div>

    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/bootstrap")
    @Scripts.Render("~/bundles/angular")
    @Scripts.Render("~/bundles/services")
    @Scripts.Render("~/bundles/controllers")  
    @Scripts.Render("~/bundles/pagination")
    @RenderSection("scripts", required: false)
</body>
</html>
此函数是我的列表分页的一部分,错误为:

$scope.$watch不是一个函数


尝试如下方式声明控制器:

App.controller('SelectCustomerController',
    ['$scope', '$location', '$resource', 'customerService',
    function($scope, $location, $resource, customerService) {
}]);

尝试如下方式声明控制器:

App.controller('SelectCustomerController',
    ['$scope', '$location', '$resource', 'customerService',
    function($scope, $location, $resource, customerService) {
}]);

下面是控制器(myController)的代码,我们在其中将服务依赖项添加为myService。要在某些参数上添加监视,请记住添加$scope作为依赖项。在下面的控制器中,我们正在watchString上添加watch。在我的例子中,我将手表设置为下拉值。在我的例子中,该服务正在调用另一个服务来进行api调用,这在我的应用程序中很常见

(function () {
    var module = angular.module('myModule', [
        'dependant-module-1',
        'dependant-module-2'
    ]);

    module.controller('myController', [
    '$scope', 'myService',
    function ($scope, myService) {

        myService.getData($scope);

        $scope.$watch('watchString', function (newValue, oldValue) {
            //Logic on watch
        });
    }
    ]);

    module.service('myService', [
    'serverDataHelper'
    function (serverDataHelper) {
        this.getData = function ($scope) {
            var params = {
                param1: 1,
                param2: 2
            };
            var myDataPromise = serverDataHelper.getData('api end point', params);

            myDataPromise.then(function (serverResponse) {
                if (serverResponse.data != null) {
                    $scope.myData = serverResponse.data;
                } else {
                    $scope.myData = null;
                }
            });

            //OR
            return myDataPromise;
        };
    }]);

})();
您可以从服务返回承诺,也可以将范围对象作为参数传递,并将响应数据分配给范围


如果您需要进一步的帮助,请务必告诉我。

下面是控制器(myController)的代码,我们正在将服务依赖项添加为myService。要在某些参数上添加监视,请记住添加$scope作为依赖项。在下面的控制器中,我们正在watchString上添加watch。在我的例子中,我将手表设置为下拉值。在我的例子中,该服务正在调用另一个服务来进行api调用,这在我的应用程序中很常见

(function () {
    var module = angular.module('myModule', [
        'dependant-module-1',
        'dependant-module-2'
    ]);

    module.controller('myController', [
    '$scope', 'myService',
    function ($scope, myService) {

        myService.getData($scope);

        $scope.$watch('watchString', function (newValue, oldValue) {
            //Logic on watch
        });
    }
    ]);

    module.service('myService', [
    'serverDataHelper'
    function (serverDataHelper) {
        this.getData = function ($scope) {
            var params = {
                param1: 1,
                param2: 2
            };
            var myDataPromise = serverDataHelper.getData('api end point', params);

            myDataPromise.then(function (serverResponse) {
                if (serverResponse.data != null) {
                    $scope.myData = serverResponse.data;
                } else {
                    $scope.myData = null;
                }
            });

            //OR
            return myDataPromise;
        };
    }]);

})();
您可以从服务返回承诺,也可以将范围对象作为参数传递,并将响应数据分配给范围


如果您需要进一步帮助,请务必告诉我。

打包时,您是否也会缩小尺寸?因为控制器不是小型化安全的。还没有小型化。但是谢谢你提供的信息,我会记住的,请尽量把你的问题限制在每篇文章一个。如果有人现在发布一个新的答案来解决您的更新问题,哪个答案更正确?解决第一个问题的那个,还是解决第二个问题的那个?此外,解决问题不同部分的多个答案会让将来可能有类似问题的其他人感到困惑。此外,您的更新也会产生误导。代码是
$scope.$watch
,但错误是
$scope.watch
,这不是一回事。提供的答案排除了一个错误,但创建了一个新错误(常见情况),是因为我的代码还是因为新的更改,这是对我问题的更新,它仍然将我的服务中的问题放入控制器中,现在我们更接近解决方案,因为它似乎围绕控制器的实际实现方式(这是问题的根源)展开。捆绑时,是否也缩小了规模?因为控制器不是小型化安全的。还没有小型化。但是谢谢你提供的信息,我会记住的,请尽量把你的问题限制在每篇文章一个。如果有人现在发布一个新的答案来解决您的更新问题,哪个答案更正确?解决第一个问题的那个,还是解决第二个问题的那个?此外,解决问题不同部分的多个答案会让将来可能有类似问题的其他人感到困惑。此外,您的更新也会产生误导。代码是
$scope.$watch
,但错误是
$scope.watch
,这不是一回事。提供的答案排除了一个错误,但创建了一个新错误(常见情况),是因为我的代码还是因为新的更改,这是对我问题的更新,它仍然将我服务中的问题纳入控制器,现在我们更接近解决方案,因为它似乎围绕着控制器的实际实现方式,这是问题的根源。虽然我不得不对控制器中的逻辑进行一些更改以进行补偿,但似乎已经解决了问题。我最初的声明有什么问题?直到我更新了我的问题,新的声明方式打破了我的控制器逻辑。你能在这里嵌入一段代码吗?或者添加一个JSFIDLE/plunkr?这将更容易调试。虽然我不得不对控制器中的逻辑进行一些更改以进行补偿,但似乎已经解决了这个问题。我最初的声明有什么问题?直到我更新了我的问题,新的声明方式打破了我的控制器逻辑。你能在这里嵌入一段代码吗?或者添加一个JSFIDLE/plunkr?这将更容易调试。