2016-08-19 54 views
4

我在用我的角度學習一開始,我實現了這個形式: http://codepen.io/jgrecule/pen/WxgqqO角JS形式只運行一次

什麼是應該做的是很基本的:它消耗的Flickr公共JSONP飼料按閃爍規格https://www.flickr.com/services/feeds/docs/photos_public/並呈現檢索到的圖片縮略圖

我實現的表單具有提交按鈕以及重置按鈕。我的問題,我想也是按照重要性的順序找到的解決方案是:

  1. ,當你鍵入的標籤一切正常,但是當u試圖通過添加一個新的標籤或用戶再次提交請求的第一次身份證或任何它不再有效。我可以看到在日誌中這樣的警告,但我不知道是什麼原因造成WARNING: Tried to load angular more than once.
  2. 復位僅適用於縮略圖而不是在我的頁面的其他控件
  3. 我想找到一種方式來顯示的用戶按下search flicker按鈕並且標籤和用戶標識輸入字段都爲空時出現錯誤消息。我試圖實現一個自定義指令,但它沒有辦法讓它工作。

非常感謝您的意見。

+1

你的JavaScript甚至沒有在codepen任何意義。首先,你有相同的模塊和控制器定義兩次,然後你有一些隨機代碼,甚至不是在一個角度模塊,但仍然嘗試使用'$ scope'。再加上你同時列出了angular.js和angular.min.js(也是bootstrap),你只需要一個。您的第一步應該是消除重複並將代碼整合到單個角度模塊中。 – Claies

回答

1
  1. 加載Angular不止一次。

    enter image description here

  2. 你resetForm功能不重置表單都沒有。它只是在兩個表單元素上調用$setValidity
    它看起來像它不試着和

    document.getElementById("searchCriteriaTags").innerHTML = ""; 
    document.getElementById("searchCriteriaIds").innerHTML = ""; 
    document.getElementById("images").innerHTML = ""; 
    

    重置表單在你的代碼的另一部分,這意味着你是直接修改DOM,對此見點4

  3. 可以添加簡單檢查$scope.form.tags === ''是否與表單中的其他字段相同。

  4. 解決了你的3點後,我不敢說你的代碼有更大的問題。你直接在整個地方修改DOM,你有很多重複的代碼,加上很多非常複雜的條件。


編輯1響應OP的評論:

  1. 清除表單字段是簡單地清除範圍的對象,表單字段綁定到的角方式。換句話說,它是做這樣的事情非常簡單:

    $scope.tags = [] // for arrays 
    $scope.name = '' // for strings 
    

    因爲表單字段通過ng-model指令綁定到這些範圍的變量,改變變量也將改變表單字段。

  2. 當兩個字段爲空,你可以像這樣設置的錯誤消息:

    $scope.checkFields = function(field1, field2) { 
        var oneEmpty = field1 === ''; 
        var twoEmpty = field2 === ''; 
        if (oneEmpty && twoEmpty) { 
         // call the failure message here 
        } 
    } 
    

EDIT 2響應評論:

  1. 首先好看到你的代碼看起來更乾淨。其次,它失敗的原因是因爲在您的搜索功能中,您將搜索字段設置爲null,例如searchCriteria.tags = null;。您應該將它們設置爲空字符串:searchCriteria.tags = '';
  2. 我不知道checkFields的目的是什麼,所以我不知道你想把它放在哪裏。如果你想顯示錯誤信息,如果字段爲空,那麼我會說checkFields()返回一個布爾值,並使用ng-show來顯示錯誤div,如果checkFields() === false

    HTML:

    <div ng-show="checkFields() === false">Fields can't be empty</div> 
    

    JS:

    $scope.checkFields = function(field1, field2) { 
        var oneEmpty = field1 === ''; 
        var twoEmpty = field2 === ''; 
        return (oneEmpty || twoEmpty); 
    } 
    
+0

謝謝阿隆,它似乎沒有問題1)通過刪除兩個angular.js負載中的一個來解決。 2)我把DOM操作當成絕望的方式來解決問題。做這件事的角度是什麼? 3)這是一個綜合支票。只要另一個字段不是空的,兩個字段中的任何一個都可以是空的。我的問題是,如果兩個字段都爲空,我怎麼能發出失敗消息。 – Julian

+1

剛編輯我的答案回覆您的評論 – Aron

+0

如果我的答案幫助,請將其標記爲已接受 – Aron