2014-11-14 73 views
0

我對Angular指令有疑問。以下是我的代碼:自定義/條件操作的角度指令

主控制器&的指令:

<div ng-controller='ShopsController'> 
    <update-createform shop="shop" action='update()'></update-createform> 
</div> 

指令JS: (這樣的方向作用將採取 '動作' 輸入參數)

angular.module('app') 
.directive('updateCreateform', function(){ 
    return { 
    templateUrl: '/form.html', 
    restrict : 'E', 
    scope: { 
     shop: '=', 
     action: '&' 
    } 
    } 
}) 

形式.html模板:

<form name="shopForm" ng-submit='action(shopForm.$valid)' novalidate> 
<input type='text' name='name' required/> 
<input type='text' name='description' required/> 
</form> 

ShopsContr奧勒有一個方法:

exports.update = function(isValid) { 
    if (isValid) { /* update the shop*/ } 
} 

什麼我做的是我傳遞的店鋪數據我從服務器獲取,發送到表單,因此我可以查看和/或更新店鋪信息。

這也是我想使用相同的形式創建店鋪信息。在這種情況下,我只需發送shop = []和action ='create()'。

我的控制器有一個採用參數isValid的更新方法。我不知道如何通過指令shopForm。$有效的外部並將其發送到服務器。

兩個問題:

  1. 我如何才能的IsValid變量從指示?
  2. 繼阿里·勒納的NG-書:他說,這是可能做到以下幾點:

http://www.scribd.com/doc/215682987/NG-Book-The-Complete-Book-on-AngularJS-2013

,而不是上面我們使用

<update-createform shop="shop" on-update='update()' on-create='create()'></update-createform> 

,並指令「動作」使用指令當店鋪不空時,將更改爲「更新」,否則操作等同於「創建」?我試過他的代碼,但我不能得到它的工作..

任何幫助將不勝感激!

+0

它應該是'<更新店的CreateForm = 「店」 行動='exports.update() 「>'?您是否嘗試過使用指令的鏈接函數並使用console.log來查看正在傳入的「動作」? – james 2014-11-14 18:07:52

回答

1

您可以將參數添加到action=update(isValid)。然後這將在表單提交中得到解決。

所以你的HTML看起來像這樣

<div ng-controller='ShopsController as shopCtrl'> 
    <update-createform shop="shop" action='shopCtrl.update(isValid)'></update-createform> 
</div> 

和你的形式看起來像這樣

<form name="shopForm" ng-submit='action({isValid:shopForm.$valid})' novalidate> 
    <input type='text' name='name' required/> 
    <input type='text' name='description' required/> 
    <button type="submit">Submit</button> 
</form> 

和控制器將

.controller('ShopsController', function() { 

    var exports = this; 

    exports.update = function(isValid) { 
    console.log(isValid) 
    if (isValid) { /* update the shop*/ } 
    } 
}) 

http://plnkr.co/edit/Qh3HzKGnOo1NTP9Pfsmh?p=preview

還有另一種方法,雖然我個人覺得語法有點奇怪。並不是說第一個解決方案也能感覺到這一點。

http://plnkr.co/edit/CRN9ruRekJiozJIBTe80?p=preview

發現有一個在一個優越的交大約指令由Dan Wahlin

http://weblogs.asp.net/dwahlin/creating-custom-angularjs-directives-part-3-isolate-scope-and-function-parameters

+0

此代碼不知道爲我工作。我在控制器中添加了一條警告('有效')聲明並嘗試提交代碼。即使表格爲空,它也會顯示「有效」。也許我錯過了什麼? – 2014-11-15 18:55:56

+0

你看過那個笨蛋嗎? – james 2014-11-15 20:08:50

+0

是的,我做到了。如果將.js行更改爲if(isValid){alert(123)},則只有在表單通過驗證時纔會觸發警報?但不知何故,即使表格爲空,我也會得到警報(123)。 – 2014-11-16 03:13:17