AngularJs - 内联作用域变量赋值

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


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


我的问题是我想将 ViewBag 中的值分配给控制器变量,但我显然无法在脚本中引用 ViewBag,因为它需要在 cshtml 页面上完成。


我试过在 ng-init 中这样做


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

或者


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

我尝试了和我在 StackOverflow 上看到的其他几个变化{{City = @ViewBag.City}},'@ViewBag.City'但无济于事。


我使用以下方法在视图上加载我的脚本:


@section Page_Scripts {

    @Scripts.Render("~/angular/ngListing")

}

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


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


这是我的控制器 + 服务(为了 SO 合并)的样子:


_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);

    }


});

任何不是hacky-ish的解决方案将不胜感激。它可以包含指令或一种将值分配给 $scope.City 但内联的方法,或者至少ViewBag.City以某种方式将我的值传递给控制器。


慕桂英4014372
浏览 201回答 1
1回答

收到一只叮咚

在ng-init指令中使用函数:<div ng-init="initCity(@ViewBag.City)"></div>在控制器中定义函数:$scope.initCity = function(city) {&nbsp; &nbsp; $scope.city = city;&nbsp; &nbsp; MakeRequest($scope.offset, $scope.city);};function MakeRequest(offset,city) {&nbsp; &nbsp; var url = "/City/GetStuff";&nbsp; &nbsp; var params = {city:city, offset:offset};&nbsp; &nbsp; var config = {params: params};&nbsp; &nbsp; $http.get(url,config).then(function (resp) {&nbsp; &nbsp; &nbsp; &nbsp; $scope.Attractions = resp.data;&nbsp; &nbsp; });}这样控制器将等待ng-init指令。
打开App,查看更多内容
随时随地看视频慕课网APP