CRM-21497 - crmRouteBinder: add deep comparison option
authorColeman Watts <coleman@civicrm.org>
Wed, 29 Nov 2017 19:39:41 +0000 (14:39 -0500)
committerColeman Watts <coleman@civicrm.org>
Wed, 29 Nov 2017 19:39:41 +0000 (14:39 -0500)
ang/crmRouteBinder.js
ang/crmRouteBinder.md

index 196fb3eb91a13ae01f3869ae03a548a1892047da..16947a3d79dc0d65e38238789fccc9f2ec1b4332 100644 (file)
@@ -51,6 +51,9 @@
 
         options.format = options.format || 'json';
         var fmt = formats[options.format];
+        if (options.deep) {
+          fmt.watcher = '$watch';
+        }
         if (options.default === undefined) {
           options.default = fmt.default;
         }
@@ -85,7 +88,7 @@
             activeTimer = null;
             ignorable = {};
           }, 50);
-        });
+        }, options.deep);
       };
 
       return $delegate;
index 37003abebc005280c99a98bcf698b177e4222ddf..a297bdc459fb6eceb6df9b03e7c1345e92b334d5 100644 (file)
@@ -30,16 +30,18 @@ Things to try out:
 
 ## Functions
 
- * `$scope.$bindToRoute(options)`
-   * The `options` object should contain keys:
-     * `expr` (string): The name of a scoped variable to sync.
-     * `param` (string): The name of a query-parameter to sync. (If the `param` is included in the URL, it will initialize the expr.)
-     * `format` (string): The type of data to put in `param`. May be one of:
-       * `json` (default): The `param` is JSON, and the `expr` is a decoded object.
-       * `raw`: The `param` is string, and the `expr` is a string.
-       * `int`: the `param` is an integer-like string, and the expr is an integer.
-       * `bool`: The `param` is '0'/'1', and the `expr` is false/true.
-     * `default` (object): The default data. (If the `param` is not included in the URL, it will initialize the expr.)
+**`$scope.$bindToRoute(options)`**
+*The `options` object should contain keys:*
+
+ * `expr` (string): The name of a scoped variable to sync.
+ * `param` (string): The name of a query-parameter to sync. (If the `param` is included in the URL, it will initialize the expr.)
+ * `format` (string): The type of data to put in `param`. May be one of:
+    * `json` (default): The `param` is JSON, and the `expr` is a decoded object.
+    * `raw`: The `param` is string, and the `expr` is a string.
+    * `int`: the `param` is an integer-like string, and the expr is an integer.
+    * `bool`: The `param` is '0'/'1', and the `expr` is false/true.
+ * `default` (object): The default data. (If the `param` is not included in the URL, it will initialize the expr.)
+ * `deep` (boolean): By default the json format will be watched using a shallow comparison. For nested objects and arrays enable this option.
 
 ## Suggested Usage