43

我正在尝试使用 ng-init 设置 $scope 属性的值,但我无法在控制器的 javascript 中访问该值。我究竟做错了什么?这是一个小提琴:http: //jsfiddle.net/uce3H/

标记:

<body ng-app>
    <div ng-controller="testController" >
        <input type="hidden" id="testInput" ng-model="testInput" ng-init="testInput='value'" />
    </div>
    {{ testInput }}
</body>

javascript:

var testController = function ($scope) {
     console.log($scope.testInput);
}

在 javascrippt 中,$scope.testInput 是未定义的。不应该是“价值”吗?

4

6 回答 6

46

您正在尝试在 Angular 完成分配之前读取设置值。

演示:

var testController = function ($scope, $timeout) {
    console.log('test');
    $timeout(function(){
        console.log($scope.testInput);
    },1000);
}

理想情况下,您应该$watch按照@Beterraba 的建议使用来摆脱计时器:

var testController = function ($scope) {
    console.log('test');
    $scope.$watch("testInput", function(){
        console.log($scope.testInput);
    });
}
于 2013-11-14T15:30:14.077 回答
39

只需将 ng-init 设置为一个函数。你不应该使用手表。

<body ng-controller="MainCtrl" ng-init="init()">
  <div ng-init="init('Blah')">{{ testInput }}</div>
</body>

app.controller('MainCtrl', ['$scope', function ($scope) {
  $scope.testInput = null;
  $scope.init = function(value) {
    $scope.testInput= value;
  }
}]);

这是一个例子。

普朗克

于 2013-11-14T15:56:02.613 回答
4

HTML:

<body ng-app="App">
    <div ng-controller="testController" >
        <input type="hidden" id="testInput" ng-model="testInput" ng-init="testInput=123" />
    </div>
    {{ testInput }}
</body>

JS:

angular.module('App', []);

testController = function ($scope) {
    console.log('test');
    $scope.$watch('testInput', testShow, true);
    function testShow() {
      console.log($scope.testInput);
    }
}

小提琴

于 2013-11-14T15:46:13.333 回答
1

就像 CodeHater 说的那样,您在设置变量之前正在访问它。

要解决此问题,请将 ng-init 指令移动到第一个 div。

<body ng-app>
    <div ng-controller="testController" ng-init="testInput='value'">
        <input type="hidden" id="testInput" ng-model="testInput" />
       {{ testInput }}
    </div>
</body>

那应该工作!

于 2013-11-14T15:41:36.700 回答
1

试试这个代码

var app = angular.module('myapp', []);
  app.controller('testController', function ($scope, $http) {
       $scope.init = function(){           
       alert($scope.testInput);
   };});

<body ng-app="myapp">
      <div ng-controller='testController' data-ng-init="testInput='value'; init();" class="col-sm-9 col-lg-9" >
      </div>
</body>

于 2016-06-01T06:29:18.487 回答
-1

我遇到了一些麻烦,$scope.$watch但是经过大量测试后,我发现我data-ng-model="User.UserName"的名字很糟糕,并且在我将其更改为data-ng-model="UserName"一切正常之后。我希望它是.导致问题的名称。

于 2016-05-19T13:08:44.597 回答