2015-06-01 157 views
1

我在使用ng-init時遇到了問題,並在我的html中爲它分配模型。AngularJs - 使用ng-init時遇到問題

以下代碼正常工作。以下代碼用於添加/編輯功能。例如,當在Edit模式下打開行時,它將保留現有值並在textbox中顯示它。

<div> 
    <div ng-if="title == 'Add Student'"> 
    <input type="text" name="name"placeholder="Student Name" data-ng-model="registration.Student.FirstName" maxlength="50"> 
    </div> 

    <div ng-if="title == 'Edit Student'"> 
    <input type="text" name="name"placeholder="Student Name" data-ng-model="student.Student.FirstName" maxlength="50"> 
    </div> 
</div> 

但是,下面的代碼是上述代碼的簡短版本不起作用。我的意思是,當行在編輯模式下打開時,它顯示文本字段,但不顯示其中的現有值(名字)。 爲什麼?

<div ng-init="model = (title == 'Add Student' ? registration.Student : student.Student)"> 
    <input type="text" name="name" placeholder="Student Name" data-ng-model="model.FirstName" maxlength="50"> 
</div> 

請建議是否NG-INIT不能以這種方式或在我的代碼中的一些問題可以用嗎?

感謝

控制器

var currentState = $state.current.name; 
    if if (currentState == "Add") 
    { 
     $scope.registration = { 
     Student: { 
     FirstName: '', 
    } 
     var _init = function() { 
    } 
     $scope.title = " Add Student"; 
    } 
    else 
    { 
     $scope.student= {}; 
     $scope.student= response[0]; 
     var _init = function() { 
     $scope.title = " Edit Student"; 
    } 
} 
+0

'角1.1.5添加三元operator',您使用的是哪個版本? – Vineet

+0

我正在使用registration.Student或student.Student根據條件標題=='Add Student'...初始化模型,並在我的輸入文本框中使用model.FirstName。 – immirza

+0

我正在使用v1.3.0 – immirza

回答

2

您是ng-init塊是錯誤的目前它返回truefalse,你以括號搞亂。

標記

<div ng-init="model = (title == 'Add Student') ? registration.Student : student.Student"> 
    <input type="text" name="name" placeholder="Student Name" data-ng-model="model.FirstName" maxlength="50"> 
</div> 

更新

在當前的情況下,而在時間上呈現的DOM,在該實例元素registration.Student & student.Student沒有任何你ng-init是越來越執行值。 ng-initmodel學生設置空對象的評估。我建議你從控制器邏輯設置模型值,這會更安全。

代碼

var currentState = $state.current.name; 
    if (currentState == "Add") 
    { 
     $scope.registration = { 
     Student: { 
     FirstName: '', 
    } 
     var _init = function() { 
    } 
     $scope.title = " Add Student"; 
    } 
    else 
    { 
     $scope.student= {}; 
     $scope.student= response[0]; 
     var _init = function() { 
     $scope.title = " Edit Student"; 
    } 
    //shifted logic in controller 
    $scope.model = (title == 'Add Student' ? registration.Student : student.Student); 

} 

標記

<div> 
    <input type="text" name="name" placeholder="Student Name" 
    data-ng-model="model.FirstName" maxlength="50"/> 
</div> 

,你可以添加更多的標誌像loadedData其他方式,也不會說,Ajax響應被取出& registration.Student & student.Student值可用在範圍內。

標記

<div ng-if="loadedData"> 
    <input type="text" name="name" placeholder="Student Name" data-ng-model="model.FirstName" maxlength="50"> 
</div> 

代碼

var currentState = $state.current.name; 
    if (currentState == "Add") 
    { 
     $scope.registration = { 
     Student: { 
     FirstName: '', 
    } 
     var _init = function() { 
    } 
     $scope.title = " Add Student"; 
    } 
    else 
    { 
     $scope.student= {}; 
     $scope.student= response[0]; 
     var _init = function() { 
     $scope.title = " Edit Student"; 
    } 
    //set flag 
    $scope.loadedData = true; 

} 
+0

ng init可以用在'ng-init =「model =(title =='Add Student'?registration.Student:student.Student」)'方法 –

+0

@visakhsujathan然後模型的值可以是真或假,讀我的答案..那是OP在哪裏錯了 –

+0

@ pankajparkar,不幸的是它沒有爲我鍛鍊。我用你提到的相同方式。更正括號但仍然沒有值顯示。 – immirza