2016-01-22 41 views
0

如何在角度項目中將值傳遞給ng-init函數? 我已經嘗試這樣做,它工作正常:角度調用一個函數並傳遞id

<div ng-controller="myCtrl" ng-init="myfunction(1)"> 

但問題是,當我做到這一點

<div ng-controller="myCtrl" ng-init="myfunction({{id}})"> 

<div ng-controller="myCtrl" ng-init="myfunction(id)"> 

這是行不通的! 如果我在我的模板中顯示{{id}}的值,我得到了id:1 ,所以id確實存在。

這是什麼問題?

+1

請參閱http://stackoverflow.com/questions/19981627/setting-scope-property-with-ng-init-doesnt-work。除此之外,你基本上是試圖在控制器上調用一個初始化函數,從控制器傳入一個值?只需從init方法直接訪問它。 –

+0

首先,「{{id}}」並不意味着作爲參數傳遞給函數。函數調用不會插入。 'id'初始化在哪裏? – frishi

+0

myFunction需要在範圍內。 – user2404597

回答

0

創建一個小提琴這裏:http://jsfiddle.net/frishi/HB7LU/22553/

基本上,通過在變量本身的功能,而不是內插值,即{{boo}}

<div ng-controller="MyCtrl" ng-init="boo=2"> 
    <div ng-click="foo(boo)">Click Me</div> 
</div> 
+0

聲明變量然後傳遞給'ng-click'是什麼意思?你可能只需要執行'ng-click =「foo(2)」',這個OP已經聲明在他的'ng-init'中。問題是關於將一​​個變量傳遞給'ng-init'。 –

+0

@BrendanGreen謝謝你糾正我!你是對的。 – frishi

1

如布倫丹綠色提到的,如果id是一個範圍可變你不需要將它傳遞給函數。會有這樣的工作嗎?

$scope.myfunction = function(){ 
    // do whatever with $scope.id 
} 

如果你真的需要使用它,你應該像第三個例子那樣工作。這是一個plunker

0

爲了在ng-init中使用myfunction,函數應該在$scope中定義,因爲ng-init會評估表達式,無論它們是什麼。

因此,這裏是你應該做的:

HTML:

<body ng-controller="MainCtrl" ng-init='myfunction("john");'> 
    <p>Hello {{name}}!</p> 
    </body> 

JS:

app.controller('MainCtrl', function($scope) { 
    $scope.name = 'Mike'; 

    $scope.myfunction = function(otherName){ 
    $scope.name = otherName; 
    }; 
}); 

Example

請記住,這是不推薦使用ng-init這樣:

唯一的適當使用ngInit的是別名特殊性質ngRepeat的 ,如在下面的演示。除了這種情況,您應該使用控制器而不是ngInit來初始化作用域上的值。

相關問題