使用 ng-init 将变量绑定到我的控制器中的值
Using ng-init to bind a variable to a value in my controller
我正在编辑页面。我从我的服务器收到一个 Json,其中包含:
{
"Q_id": 1,
"isMultipuleAns": 0,
"Q_mediaType": "page"
}
我正在尝试将信息放入输入 div(类型=文本)或文本区域 div。
<textarea
type="text"
name="question_title"
ng-model="question.question_title"
ng-init="question.question_title=index"`>
在我的控制器中我有这样的东西:
app.controller("someController",function($scope,$location,$http){
// some http requests that puts the mentioned jason in $scope.myJson
$scope.index= $scope.myJson.Q_id;
}
而且无论我尝试什么,ng-init 都只适用于静态字符串。我无法让真实 ID 出现在网站上。只得到一个空白的输入字段。
我是 html 的新手,或者 angular...求助?
我猜这是因为你在异步方法中调用 $scope.index= $scope.myJson.Q_id;
- 那是 ng-inits 已经被触发的时候(不能确定,因为没有提供足够的代码)。
但总的来说,您可能可以使用除 ng-init 以外的其他方法,因为将应用程序逻辑放在视图中是一种相当糟糕的做法。为什么不呢:
$scope.index= $scope.myJson.Q_id;
$scope.question.question_title= $scope.myJson.Q_id;
或者,有时您可以使用 ng-if 延迟 ng-init,例如:
<textarea type="text" name="question_title" ng-model="question.question_title" ng-if="index" ng-init="question.question_title=index">
您不能像以前那样在输入中使用 ng-init
,因为当您的视图出现时它会在项目开始时起作用。
所以 ng-init
为我做了什么!?
ng-init
used for calling functions from controller
inside the view
or set default values for variables (which didn't use as ng-model
) for example:
var controller = function($scope){
$scope.makeNewId = function(){
return 15899933666;
}
}
在此示例中,我们可以直接在控制器中调用 $scope.makeNewId()
,我们也可以在 view
编译为 ng-init="makeNewId()"
时调用 $scope.makeNewId()
,如果您注意它可以工作 [=41] =]每页重新加载
所以我的代码有什么问题!
在你的代码中你想用 ng-init
设置 ng-model
值,完全错误
如果你问为什么,那是因为你使用了类似这样的东西 question.question_title
这意味着你有一个 object
,它的名字是 question
;所以我可以很容易地在我的控制器中定义它:
var controller = function($scope){
$scope.question = {
question_title: $scope.myJson.Q_id
};
}
在 div 标签中使用 ng-init,像这样包围您的文本区域。
<div ng-init="question.question_title=index">
<textarea type="text" name="question_title" ng-model="question.question_title">
</div>
这应该用 $scope.question.question_title 中的数据预填充您的文本区域,并确保在您的控制器中 $scope.question 已经这样定义。
$scope.question = {
question_title:""
}
我正在编辑页面。我从我的服务器收到一个 Json,其中包含:
{
"Q_id": 1,
"isMultipuleAns": 0,
"Q_mediaType": "page"
}
我正在尝试将信息放入输入 div(类型=文本)或文本区域 div。
<textarea
type="text"
name="question_title"
ng-model="question.question_title"
ng-init="question.question_title=index"`>
在我的控制器中我有这样的东西:
app.controller("someController",function($scope,$location,$http){
// some http requests that puts the mentioned jason in $scope.myJson
$scope.index= $scope.myJson.Q_id;
}
而且无论我尝试什么,ng-init 都只适用于静态字符串。我无法让真实 ID 出现在网站上。只得到一个空白的输入字段。
我是 html 的新手,或者 angular...求助?
我猜这是因为你在异步方法中调用 $scope.index= $scope.myJson.Q_id;
- 那是 ng-inits 已经被触发的时候(不能确定,因为没有提供足够的代码)。
但总的来说,您可能可以使用除 ng-init 以外的其他方法,因为将应用程序逻辑放在视图中是一种相当糟糕的做法。为什么不呢:
$scope.index= $scope.myJson.Q_id;
$scope.question.question_title= $scope.myJson.Q_id;
或者,有时您可以使用 ng-if 延迟 ng-init,例如:
<textarea type="text" name="question_title" ng-model="question.question_title" ng-if="index" ng-init="question.question_title=index">
您不能像以前那样在输入中使用 ng-init
,因为当您的视图出现时它会在项目开始时起作用。
所以 ng-init
为我做了什么!?
ng-init
used for calling functions fromcontroller
inside theview
or set default values for variables (which didn't use asng-model
) for example:
var controller = function($scope){
$scope.makeNewId = function(){
return 15899933666;
}
}
在此示例中,我们可以直接在控制器中调用 $scope.makeNewId()
,我们也可以在 view
编译为 ng-init="makeNewId()"
时调用 $scope.makeNewId()
,如果您注意它可以工作 [=41] =]每页重新加载
所以我的代码有什么问题!
在你的代码中你想用 ng-init
设置 ng-model
值,完全错误
如果你问为什么,那是因为你使用了类似这样的东西 question.question_title
这意味着你有一个 object
,它的名字是 question
;所以我可以很容易地在我的控制器中定义它:
var controller = function($scope){
$scope.question = {
question_title: $scope.myJson.Q_id
};
}
在 div 标签中使用 ng-init,像这样包围您的文本区域。
<div ng-init="question.question_title=index">
<textarea type="text" name="question_title" ng-model="question.question_title">
</div>
这应该用 $scope.question.question_title 中的数据预填充您的文本区域,并确保在您的控制器中 $scope.question 已经这样定义。
$scope.question = {
question_title:""
}