代码之家  ›  专栏  ›  技术社区  ›  Adrian

AngularJS-内联为范围变量赋值

  •  0
  • Adrian  · 技术社区  · 6 年前

    这是一个相当简单的问题,我使用的是AngularJS v1.7.2和C MVC。

    我有了标准的布局页面和视图设置。 我从外部脚本文件加载AngularJS控制器/服务,所以视图上没有任何内容。

    我的问题是,我想将一个值从viewbag赋给一个控制器变量,但显然我不能在脚本中引用viewbag,因为它需要在cshtml页面上完成。

    我试过在Ng Init里面这样做

    <div ng-init="City = @ViewBag.City"></div>
    

    <div style="visibility: hidden;">{{CityId = '1'}}</div>
    

    我试过变种 {{City = @ViewBag.City}} , '@ViewBag.City' 我在StackOverflow上看到的其他两个都没有用。

    我在视图上加载脚本时使用:

    @section Page_Scripts {
        @Scripts.Render("~/angular/ngListing")
    }
    

    这显然是在布局中加载的。我的控制器工作正常,所以这不是问题。

    我的控制器在初始化时进行Ajax调用,此时我需要 $scope.City 要用正确的值填充,但它始终设置为0。

    以下是我的控制器+服务(为了这样组合)的样子:

    _mainApp.controller("ListingCtrl", function ($scope, $http) {
        $scope.City = 0;
        $scope.Attractions = [];
        $scope.Offset = 0;
        $scope.Pages = new Array(10);
    
        var MakeRequest = function (offset) {
            $http.post("/City/GetStuff?City=" + $scope.City + "&Offset=" + offset).then(function (resp) {
                $scope.Attractions = resp.data;
            });
        }
    
        MakeRequest($scope.Offset);
    
        $scope.PageUp = function () {
            $scope.Offset++;
            MakeRequest($scope.Offset);
        }
    
        $scope.PageDown = function () {
            $scope.Offset--;
            MakeRequest($scope.Offset);
        }
    
        $scope.GoTo = function (offset) {
            $scope.Offset = offset;
            MakeRequest(offset);
        }
    
    });
    

    任何非黑客的解决方案都会受到赞赏。它可以包含指令或将值赋给$scope.city但内联的方法,或者至少获取 ViewBag.City 以某种方式传递给控制器的值。

    1 回复  |  直到 6 年前
        1
  •  1
  •   georgeawg    6 年前

    在中使用函数 ng-init 指令:

    <div ng-init="initCity(@ViewBag.City)"></div>
    

    在控制器中定义函数:

    $scope.initCity = function(city) {
        $scope.city = city;
        MakeRequest($scope.offset, $scope.city);
    };
    
    function MakeRequest(offset,city) {
        var url = "/City/GetStuff";
        var params = {city:city, offset:offset};
        var config = {params: params};
        $http.get(url,config).then(function (resp) {
            $scope.Attractions = resp.data;
        });
    }
    

    这样,控制器将等待 N-init 指令。